Compare commits

..

967 Commits

Author SHA1 Message Date
AuxXxilium
c8a6e0e710 Merge pull request #4720 from AuxXxilium/dev
Dev
2024-11-16 19:03:16 +01:00
AuxXxilium
cf2daa9807 networkdiag: add useridapi check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-16 19:01:58 +01:00
AuxXxilium
167d909e13 arc-functions: add message for user without a brain
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-16 18:27:12 +01:00
AuxXxilium
b4ebd305bd functions: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-16 15:45:11 +01:00
AuxXxilium
f4bbb7c5bb tree: rework more logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-16 11:31:31 +01:00
AuxXxilium
390f5b11db tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-16 10:42:03 +01:00
AuxXxilium
8bc3393d55 functions: move to correct file
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-16 00:35:56 +01:00
AuxXxilium
81f436703a Merge pull request #4691 from AuxXxilium/dev
Dev
2024-11-15 16:11:31 +01:00
AuxXxilium
cee2d7d263 tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-15 15:46:33 +01:00
AuxXxilium
ab508a9eb5 arc-functions: rename update function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-15 15:35:27 +01:00
AuxXxilium
16a73afe9d arc-functions: more logic fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-15 15:25:43 +01:00
AuxXxilium
c4cc0b779a arc-functions: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-15 14:57:03 +01:00
AuxXxilium
1844d5291a Merge pull request #4688 from AuxXxilium/dev
arc-functions: more work
2024-11-15 14:28:36 +01:00
AuxXxilium
601547d9db arc-functions: more work
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-15 14:16:47 +01:00
AuxXxilium
2ec8f3654c Merge pull request #4687 from AuxXxilium/dev
Dev
2024-11-15 14:10:19 +01:00
AuxXxilium
a68b5d446e functions: fix hwid for multiple nic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-15 14:08:09 +01:00
AuxXxilium
3ccb91be9f arc-functions: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-14 20:42:40 +01:00
AuxXxilium
47020c7e56 Merge pull request #4661 from AuxXxilium/dev
Dev
2024-11-13 23:54:00 +01:00
AuxXxilium
3e010b781a arc: fix copy
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-13 23:53:11 +01:00
AuxXxilium
dcd86a4272 build: fix local
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-13 23:43:24 +01:00
AuxXxilium
c287e33aab arc: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-13 18:55:07 +01:00
AuxXxilium
95c1eb6897 tree: rework more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-13 18:05:58 +01:00
AuxXxilium
fb183e437e build: fix local
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-13 17:23:09 +01:00
AuxXxilium
efca3aaf6d arc-functions: rework id check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-13 01:20:37 +01:00
AuxXxilium
7e5242349c Merge pull request #4636 from AuxXxilium/dev
arc-functions: fix loop
2024-11-13 00:39:22 +01:00
AuxXxilium
46ec4215d7 arc-functions: fix loop
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-13 00:32:59 +01:00
AuxXxilium
cd40c45fa4 Merge pull request #4630 from AuxXxilium/dev
build: update
2024-11-12 17:02:32 +01:00
AuxXxilium
f44a142d01 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-12 17:02:13 +01:00
AuxXxilium
62e4b267de Merge pull request #4629 from AuxXxilium/dev
build: fix
2024-11-12 16:51:32 +01:00
AuxXxilium
b036a2aef2 build: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-12 16:51:19 +01:00
AuxXxilium
a2c196f453 Merge pull request #4627 from AuxXxilium/dev
functions: more...
2024-11-12 16:11:25 +01:00
AuxXxilium
afb22a6321 functions: more...
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-12 16:11:05 +01:00
AuxXxilium
5e21346aba Merge pull request #4626 from AuxXxilium/dev
Dev
2024-11-12 16:04:52 +01:00
AuxXxilium
fb938806a2 functions: finalize hwid
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-12 16:02:28 +01:00
AuxXxilium
1bde43ca66 functions: make hwid unique
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-11 21:42:40 +01:00
AuxXxilium
d890c54a1b arc: add more features for online
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-11 21:05:07 +01:00
AuxXxilium
d876d274d4 functions: add new
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-11 18:54:25 +01:00
AuxXxilium
7f6b276a59 Merge pull request #4565 from AuxXxilium/dev
arc-functions: make hwid unique
2024-11-10 18:46:14 +01:00
AuxXxilium
24d9ed7bb3 arc-functions: make hwid unique
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-10 18:44:21 +01:00
AuxXxilium
23ba1abd70 Merge pull request #4563 from AuxXxilium/dev
Dev
2024-11-10 18:36:00 +01:00
AuxXxilium
1d04d3f59f arc: more logic rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-10 18:24:04 +01:00
AuxXxilium
78f5455b69 arc: more ...
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-10 17:39:26 +01:00
AuxXxilium
81d72a0800 arc: next step
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-10 17:16:46 +01:00
AuxXxilium
73ec652bd0 boot: fix boot message
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-10 12:56:32 +01:00
AuxXxilium
d53d454828 Merge pull request #4553 from AuxXxilium/dev
build: update
2024-11-10 11:10:10 +01:00
AuxXxilium
bbc9904b3e build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-10 11:09:53 +01:00
AuxXxilium
2bc754c9a1 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-10 00:56:17 +01:00
AuxXxilium
f50bb9cc46 arc-functions: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-10 00:16:03 +01:00
AuxXxilium
8de9970341 ramdisk: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 23:58:14 +01:00
AuxXxilium
1245ca4f4a arc-functions: add missing spaces
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 23:46:01 +01:00
AuxXxilium
10a5a18abb arc-function: set defaults for latest changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 21:59:11 +01:00
AuxXxilium
51eea40ea7 boot: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 21:33:18 +01:00
AuxXxilium
2b13648cc4 arc-functions: more work
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 21:17:57 +01:00
AuxXxilium
6b315e08ad arc-functions: rework sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 21:16:12 +01:00
AuxXxilium
fe642ebec2 build: update 2
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 17:59:57 +01:00
AuxXxilium
bc43cdaeb7 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 17:43:20 +01:00
AuxXxilium
0966a2b783 boot: logic fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 17:30:02 +01:00
AuxXxilium
4c5bfbe695 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 13:45:54 +01:00
AuxXxilium
623271fc6c build: include dependencies in release
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-09 12:26:52 +01:00
AuxXxilium
3df2339e63 arc: fix latest
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-08 20:31:40 +01:00
AuxXxilium
323c266812 init/boot: add arc_build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-08 19:57:07 +01:00
AuxXxilium
a5055dbaf4 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-08 19:44:29 +01:00
AuxXxilium
d9c71d453a tree: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-08 19:10:03 +01:00
AuxXxilium
474b8bbe03 arc-functions: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-03 17:19:16 +01:00
AuxXxilium
c45d52459d arc-functions: fix typos
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-03 13:25:13 +01:00
AuxXxilium
1ec1f7ffb9 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-02 18:56:39 +01:00
AuxXxilium
3777d2c952 arc-functions: add back branch switch to update menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-02 14:53:49 +01:00
AuxXxilium
bd868c6142 arc: rewrite more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-02 14:35:39 +01:00
AuxXxilium
62bf4259b9 arc: rework some menu things
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-02 14:20:09 +01:00
AuxXxilium
bcc7a7f6c1 addons: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-02 01:10:01 +01:00
AuxXxilium
8f6a18f6dd functions: remove unused
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-01 15:55:34 +01:00
AuxXxilium
d48a970cd8 arc: rework ui
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-01 14:23:45 +01:00
AuxXxilium
39f119c123 arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-11-01 11:44:57 +01:00
AuxXxilium
cc429e4ea5 tree: remove usage of syno api
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 22:03:59 +01:00
AuxXxilium
7da081d887 update: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 12:57:57 +01:00
AuxXxilium
73e9eae212 addons: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 12:43:04 +01:00
AuxXxilium
e72a8586cf arc: optimize changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 12:36:10 +01:00
AuxXxilium
d9650981f7 arc-functions: typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 12:29:03 +01:00
AuxXxilium
4cced72bbb arc: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 12:27:42 +01:00
AuxXxilium
bbc7e9046d arc: try something new
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 11:47:16 +01:00
AuxXxilium
e512310055 functions: add logic check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 11:26:00 +01:00
AuxXxilium
d44f741887 consts: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 11:19:21 +01:00
AuxXxilium
f6e88b135b update: rewrite logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 11:19:10 +01:00
AuxXxilium
8e2794c1bf update: add backup logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 10:56:49 +01:00
AuxXxilium
843fa0aa30 functions: optimize logic for online check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 10:52:53 +01:00
AuxXxilium
99bb6937eb arc: rewrite more api related
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 02:04:12 +01:00
AuxXxilium
7a5932fea5 arc: reduce api calls and rewrite offline mode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-31 01:48:27 +01:00
AuxXxilium
ccfbd4c15c tree: rework update functions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-30 20:53:35 +01:00
AuxXxilium
e7994e5cd2 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-30 20:02:17 +01:00
AuxXxilium
3295073c99 tree: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-30 19:56:11 +01:00
AuxXxilium
b6c0b24b70 tree: fix VMM issue on epyc7002
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-29 16:57:50 +01:00
AuxXxilium
998bdceba7 arc: more rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-27 23:04:48 +01:00
AuxXxilium
ae0f6a30fe arc: rewrite more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-27 21:26:45 +01:00
AuxXxilium
465b147960 tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-27 21:16:55 +01:00
AuxXxilium
a4da6be93b arc: fix reset loader
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-27 18:58:56 +01:00
AuxXxilium
d6a5443593 addons: remove online addons if arc is offline
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-27 18:39:05 +01:00
AuxXxilium
4ba2e6baa6 tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-27 18:33:41 +01:00
AuxXxilium
962645bb9e arc: add check for cpufreqscaling
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-27 18:33:20 +01:00
AuxXxilium
6dfce5cc1b arc: add offline check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-27 18:30:22 +01:00
AuxXxilium
39b95a840a arc: rework update way
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-26 20:15:57 +02:00
AuxXxilium
e3b850ecb0 arc-functions: changes for upcoming
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-26 13:02:18 +02:00
AuxXxilium
fb9d67881d arc: expand sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-26 12:59:40 +02:00
AuxXxilium
bf8d488eb9 arc: fix config restore
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-26 12:41:02 +02:00
AuxXxilium
877feba5cb arc: remove dependencies for cpufreqscaling
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-26 11:36:56 +02:00
AuxXxilium
bb8c74e9ac arc: fix patch reset while read models
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-26 11:29:06 +02:00
AuxXxilium
25dc3115b6 grub: update 2024-10-25 20:29:10 2024-10-25 22:15:07 +02:00
AuxXxilium
3cdc3c874c tree: fix more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 22:14:52 +02:00
AuxXxilium
bce7d47e4a grub: shrink partition 2
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 20:20:11 +02:00
AuxXxilium
1d13466f83 grub: update 2024-10-25 20:09:50 2024-10-25 20:16:13 +02:00
AuxXxilium
ddd7e2ccef functions: fix sortnetif for arc
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 20:15:58 +02:00
AuxXxilium
5b40850fe0 functions: fix .dev version check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 20:07:08 +02:00
AuxXxilium
8810cd128d grub: shrink loader to 1G
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 20:00:46 +02:00
AuxXxilium
1c0f3a4c06 compat: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 19:56:02 +02:00
AuxXxilium
2594a8a599 tree: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 19:55:21 +02:00
AuxXxilium
138d683318 boot: add option to customize
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 19:43:54 +02:00
AuxXxilium
3f916ce79e tree: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 18:32:23 +02:00
AuxXxilium
96e0679adb tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 18:20:04 +02:00
AuxXxilium
293f266842 tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 16:05:39 +02:00
AuxXxilium
7ea1888c93 arc-functions: rework addons
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 15:16:52 +02:00
AuxXxilium
905131ae8e Revert "init: remove sortnetif for now"
This reverts commit 9e482783f0.
2024-10-25 14:49:37 +02:00
AuxXxilium
4d47d4dfb3 functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:48:01 +02:00
AuxXxilium
0f64c0ed80 arc: fix sn/mac stuff
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:45:13 +02:00
AuxXxilium
56d9c038a4 tree: syntax fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:32:32 +02:00
AuxXxilium
91babd9162 functions: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:12:48 +02:00
AuxXxilium
a03f4fcada build: update local stable
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:12:14 +02:00
AuxXxilium
326c92acc5 build: update local next
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:12:14 +02:00
AuxXxilium
4ddaaf7584 build: update build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:12:14 +02:00
AuxXxilium
5c45588bf8 build: update autobuild
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:12:14 +02:00
AuxXxilium
9e482783f0 init: remove sortnetif for now
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-25 14:11:55 +02:00
AuxXxilium
290ef7e65a build: remove ova from autobuild
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 23:42:39 +02:00
AuxXxilium
1830fa3220 build: fix autobuild
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 23:36:06 +02:00
AuxXxilium
fd7c7508b0 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 20:17:24 +02:00
AuxXxilium
57a8b7ccb5 arc: rewrite message
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 20:12:13 +02:00
AuxXxilium
1fadffe0c7 build: update dev build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:33:20 +02:00
AuxXxilium
678cc34e09 update: rewrite version after update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:28:44 +02:00
AuxXxilium
db5776871e build: update dev build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:23:24 +02:00
AuxXxilium
f0d61394a0 grub: update 2024-10-24 19:21:21 2024-10-24 19:21:42 +02:00
AuxXxilium
2ab92748a1 arc-functions: update credits
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:21:22 +02:00
AuxXxilium
65d18c8792 tree: modify more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:18:05 +02:00
AuxXxilium
4250b5341b arc-functions: change grub img path
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:10:52 +02:00
AuxXxilium
e03df2dbab build: update local build files
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:08:56 +02:00
AuxXxilium
064c9fe84b grub: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:06:29 +02:00
AuxXxilium
8dcf836a69 tree: merge latest changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 19:05:24 +02:00
AuxXxilium
dc80125b75 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-24 18:59:15 +02:00
AuxXxilium
120e70c3b0 Merge pull request #3892 from AuxXxilium/dev
tree: fix syntax
2024-10-02 22:58:26 +02:00
AuxXxilium
dba67f8d42 tree: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-02 22:57:56 +02:00
AuxXxilium
a5aaa8bf6e Merge pull request #3891 from AuxXxilium/dev
Dev
2024-10-02 22:54:29 +02:00
AuxXxilium
7bc8857fb0 arc: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-02 22:02:59 +02:00
AuxXxilium
103c99d291 arc/update: remove "dev" from update versions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-02 21:15:20 +02:00
AuxXxilium
d285ed08d0 Merge pull request #3870 from AuxXxilium/dev
Dev
2024-10-01 21:21:33 +02:00
AuxXxilium
f14b7e3308 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-01 21:21:01 +02:00
AuxXxilium
043401f478 modulelist: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-01 21:19:44 +02:00
AuxXxilium
440b84be18 Merge pull request #3869 from AuxXxilium/dev
Dev
2024-10-01 21:15:08 +02:00
AuxXxilium
8fac73a1d7 arc: move ram amount write to build step
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-01 21:02:34 +02:00
AuxXxilium
44316e5083 arc-functions: add sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-01 20:51:44 +02:00
AuxXxilium
cb3611b88a arc-functions: remove advanced update features
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-01 20:49:55 +02:00
AuxXxilium
07112560e4 tree: add sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-10-01 20:25:51 +02:00
AuxXxilium
ff4298c305 Merge pull request #3823 from AuxXxilium/dev
Dev
2024-09-29 18:44:41 +02:00
AuxXxilium
1462a53e6a arc-functions: fix warning
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 18:39:47 +02:00
AuxXxilium
94c1c901c2 tree: rewrite more syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 18:37:19 +02:00
AuxXxilium
2fbfef5178 restore: rewrite logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 18:32:51 +02:00
AuxXxilium
c72a0fd713 restore: check modules tree
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 18:24:38 +02:00
AuxXxilium
d92244ff77 arc: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 18:19:36 +02:00
AuxXxilium
0c7a1a3c75 arc: fix sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 16:41:23 +02:00
AuxXxilium
132245fe80 arc: fix build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 16:31:15 +02:00
AuxXxilium
2395316403 arc: rewrite more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 16:19:17 +02:00
AuxXxilium
6327553181 arc: add sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 16:12:19 +02:00
AuxXxilium
ab9c19968b arc-functions: fix password reset
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 15:59:32 +02:00
AuxXxilium
9448e3f298 tree: cleanup and rewrite logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 15:45:49 +02:00
AuxXxilium
8a1ea9bd53 tree: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 15:15:02 +02:00
AuxXxilium
dee1244b7d arc: add back ipv6 switch 2024-09-29 11:47:35 +02:00
AuxXxilium
2b2ded937c update: more rewrites
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-29 11:37:09 +02:00
AuxXxilium
1cec4f728f build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-28 01:31:55 +02:00
AuxXxilium
04990a0fb8 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-27 22:05:59 +02:00
AuxXxilium
831538f7f9 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-27 21:44:02 +02:00
AuxXxilium
3066ce8cac arc-functions: change addon selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-27 21:40:38 +02:00
AuxXxilium
c701d2e0c6 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-27 21:30:19 +02:00
AuxXxilium
f3f2a0bce5 sysinfo: fix gpu name
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-27 21:04:54 +02:00
AuxXxilium
efc4a116a2 Merge pull request #3791 from AuxXxilium/dev
tree: rework loader update
2024-09-27 20:52:31 +02:00
AuxXxilium
c1bdea0e57 tree: rework loader update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-27 20:52:14 +02:00
AuxXxilium
4c9b3d353c Merge pull request #3725 from AuxXxilium/dev
build: update
2024-09-24 23:42:59 +02:00
AuxXxilium
fd08eef485 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-24 23:24:41 +02:00
AuxXxilium
508d5b2962 Merge pull request #3697 from AuxXxilium/dev
tree: some rewrite
2024-09-23 21:16:19 +02:00
AuxXxilium
0b6a20fda0 tree: some rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-23 20:43:36 +02:00
AuxXxilium
7f666e643e Merge pull request #3669 from AuxXxilium/dev
Dev
2024-09-22 16:19:33 +02:00
AuxXxilium
eab68b37ee arc: add sanity check for latest changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-21 15:27:56 +02:00
AuxXxilium
270ecd019e arc: rework latest changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-21 15:24:54 +02:00
AuxXxilium
34c4adb14d grub: shrink image to 1536MB
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-21 13:01:14 +02:00
AuxXxilium
90df8f1848 update: use cp instead of mv
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-21 13:00:52 +02:00
AuxXxilium
c1299a469d tree: more rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-21 12:52:23 +02:00
AuxXxilium
76730b1063 tree: rewrite more addon related
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-21 11:54:58 +02:00
AuxXxilium
e42305bc48 tree: update addons selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-21 11:22:52 +02:00
AuxXxilium
62f01f4e1b Merge pull request #3641 from AuxXxilium/dev
Dev
2024-09-20 23:35:01 +02:00
AuxXxilium
d9b3367a8a update: fix addons update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-20 19:47:29 +02:00
AuxXxilium
b9860d0adf functions: disable time write to bios
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-20 13:39:23 +02:00
AuxXxilium
7285be06cb Revert "grub: shrink image to 1.5gb"
This reverts commit ee7200e189.
2024-09-20 13:24:05 +02:00
AuxXxilium
def8fa1799 Revert "grub: update 2024-09-19 18:09:28"
This reverts commit 46f2e6d576.
2024-09-20 13:24:05 +02:00
AuxXxilium
41ac923127 grub: add more modules
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-19 23:10:52 +02:00
AuxXxilium
100526b0b0 arc: rewrite function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-19 22:32:45 +02:00
AuxXxilium
46f2e6d576 grub: update 2024-09-19 18:09:28 2024-09-19 21:09:35 +02:00
AuxXxilium
93c039b7c2 tree: readd something old
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-19 21:09:25 +02:00
AuxXxilium
ee7200e189 grub: shrink image to 1.5gb
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-19 17:54:52 +02:00
AuxXxilium
b4ede7e2c4 arc/arc-functions: add back acpi check for more clearification
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-19 17:06:50 +02:00
AuxXxilium
d299f0b6b6 Merge pull request #3577 from AuxXxilium/dev
build: cleanup
2024-09-17 20:52:25 +02:00
AuxXxilium
16c6e677c2 build: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-17 20:29:06 +02:00
AuxXxilium
802b28587c Merge pull request #3576 from AuxXxilium/dev
build: update
2024-09-17 19:57:24 +02:00
AuxXxilium
786f6fc49b build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-17 19:57:05 +02:00
AuxXxilium
11cbf15da1 Merge pull request #3573 from AuxXxilium/dev
Dev
2024-09-17 19:38:54 +02:00
AuxXxilium
20d65f42e9 tree: fix more syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-17 18:56:39 +02:00
AuxXxilium
430f31edcc tree: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-17 18:48:05 +02:00
AuxXxilium
2729ea0f43 tree: rework static ip
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-15 00:13:25 +02:00
AuxXxilium
acdcd2c63c arc-functions: read correct mac for IP
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-14 20:52:23 +02:00
AuxXxilium
8ccf7d39fd arc-functions: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-14 18:14:36 +02:00
AuxXxilium
3ef298098b arc-functions: rework addon selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-14 17:44:55 +02:00
AuxXxilium
9234501099 arc: rework backup build logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-11 18:55:51 +02:00
AuxXxilium
561482b14a arc: rewrite description
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-10 21:12:39 +02:00
AuxXxilium
686b894e91 tree: rework functions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-10 21:01:43 +02:00
AuxXxilium
9ee2b6cc23 boot: cleanup (speedup boot - time reading has no sense here, time will be read by dsm at boot)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-10 20:22:21 +02:00
AuxXxilium
63d3816464 boot: rewrite for non rtc compatible systems
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-10 20:01:15 +02:00
AuxXxilium
7e595e828c arc: move static ip to loader options
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-09 23:29:17 +02:00
AuxXxilium
748eed9e1f boot: change back to reboot to dsm instead of booting dsm directly
(better for hardware initialization)

Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-09 22:55:40 +02:00
AuxXxilium
250e809fe2 compatboot: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-09 19:12:27 +02:00
AuxXxilium
812a5d95f1 arc: enable compatboot
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-08 19:09:36 +02:00
AuxXxilium
73aa58b38b tree: call ntp earlier
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-08 18:50:45 +02:00
AuxXxilium
9d3293f91a tree: fix more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-08 12:44:42 +02:00
AuxXxilium
51ffa84ffb tree: move function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-08 11:25:29 +02:00
AuxXxilium
f507020948 functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-07 21:17:23 +02:00
AuxXxilium
4343d7fd94 sysinfo: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-07 21:15:20 +02:00
AuxXxilium
b436eed058 boot: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-07 17:36:30 +02:00
AuxXxilium
091f0aa722 arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-07 12:54:21 +02:00
AuxXxilium
5b917907ca arc: more logic rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-07 12:51:26 +02:00
AuxXxilium
36ecfa5ca2 update: don't clean arc key
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-07 12:47:29 +02:00
AuxXxilium
f6a7c0729e tree: rewrite more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-07 12:38:00 +02:00
AuxXxilium
3429d54d51 tree: fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-06 23:04:26 +02:00
AuxXxilium
d9c9042099 tree: show timezone/region to user
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-06 20:44:01 +02:00
AuxXxilium
54d5ba40dd functions: don't set region/timezone only locally
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-06 20:40:10 +02:00
AuxXxilium
028b30c24e arc: add asking for automated build after model/version
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-06 20:33:50 +02:00
AuxXxilium
29a5a54f7e boot: remove ntp from boot
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-06 17:32:51 +02:00
AuxXxilium
97431a6a3b arc: rewrite more logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-06 17:31:44 +02:00
AuxXxilium
bd0e53bb7f arc: rename backup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 23:48:37 +02:00
AuxXxilium
74d88856f7 arc: rewrite update menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 23:39:54 +02:00
AuxXxilium
747b0fca36 arc: add space to sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 23:29:04 +02:00
AuxXxilium
261fbae2af arc: more rewrite for time
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 23:27:53 +02:00
AuxXxilium
949ab7fe2e arc: rewrite timezone/region check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 22:36:30 +02:00
AuxXxilium
3fba97c0c9 arc/boot: format data output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 21:10:55 +02:00
AuxXxilium
9842d5de61 build: update local build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 21:04:28 +02:00
AuxXxilium
84e63a1ac8 arc: menu change description
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 20:59:04 +02:00
AuxXxilium
5f6b18a216 arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 20:50:31 +02:00
AuxXxilium
3911aab34b arc: fix network
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 19:23:58 +02:00
AuxXxilium
e461f25cf7 arc: force copy files while build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 17:54:10 +02:00
AuxXxilium
bf7c53bc4d tree: fix branch system
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 17:36:39 +02:00
AuxXxilium
98c5a6ed95 ramdisk: remove updatenotify from system addons
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 17:24:31 +02:00
AuxXxilium
4193c5e867 tree: some fixes and debug
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-05 16:46:21 +02:00
AuxXxilium
53520f89fd arc: fix logic in update menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-04 19:43:15 +02:00
AuxXxilium
3e659f4745 arc: add more sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-04 18:23:37 +02:00
AuxXxilium
70c198c157 arc: fix more logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-04 18:10:35 +02:00
AuxXxilium
0faa83d778 arc: fix offline (non automated) build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-04 18:00:04 +02:00
AuxXxilium
b7cd95454a custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 09:38:42 -04:00
AuxXxilium
d3bf99a0b3 custom: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 09:28:38 -04:00
AuxXxilium
7f03145d85 custom: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 09:25:49 -04:00
AuxXxilium
dcc9dd73d1 custom: add missing
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 09:19:22 -04:00
AuxXxilium
52c499866c custom: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 09:16:35 -04:00
AuxXxilium
2b30628d4c custom: add missing
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 09:16:18 -04:00
AuxXxilium
5d1801cfcd custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 09:10:52 -04:00
AuxXxilium
65f5ebc371 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 08:56:25 -04:00
AuxXxilium
f9911d15fc build: update custom
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 08:45:56 -04:00
AuxXxilium
ca8e8eba0e update: add more sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 05:59:25 -04:00
AuxXxilium
5f6fe509b7 build: set min version to 24.09.01
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 05:49:02 -04:00
AuxXxilium
9fbf06d4eb boot: add space between version and build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 05:37:48 -04:00
AuxXxilium
a8e3728088 arc: rewrite text
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 05:28:29 -04:00
AuxXxilium
f6926e686c arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 05:20:51 -04:00
AuxXxilium
19a6d05786 arc: remove warning
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 04:27:01 -04:00
AuxXxilium
4cf514f97d build: fix local versions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 04:25:11 -04:00
AuxXxilium
ac38020ce7 arc: move primary nic to loader options
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 04:23:37 -04:00
AuxXxilium
5d9022e916 update: add update inside development mode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-09-01 04:18:07 -04:00
AuxXxilium
eb48f87f3a ramdisk: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-31 14:13:28 -04:00
AuxXxilium
45f5b80850 arc: update logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-31 13:39:45 -04:00
AuxXxilium
e9819fee80 arc: cleanup old files
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-31 09:41:11 +02:00
AuxXxilium
8d3479a524 arc: fix more logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-31 09:35:40 +02:00
AuxXxilium
0526fc732a arc: add url sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-30 22:20:31 +02:00
AuxXxilium
60f9bcf768 tree: rework more logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-30 19:58:32 +02:00
AuxXxilium
e339aad9e2 arc: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-30 19:34:10 +02:00
AuxXxilium
b953d57c54 arc: fix latest
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-30 15:38:12 +02:00
AuxXxilium
fcddafcdf7 arc: fix logix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 20:22:07 +02:00
AuxXxilium
c5967c3646 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 20:20:00 +02:00
AuxXxilium
d0e85c0202 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 20:17:30 +02:00
AuxXxilium
a7cb8a4a5f custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 20:13:10 +02:00
AuxXxilium
874d14b948 arc: more rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 19:38:14 +02:00
AuxXxilium
87e9682a1e build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 18:01:21 +02:00
AuxXxilium
567dca7f8d arc-functions: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 17:40:31 +02:00
AuxXxilium
3c38310164 functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 17:40:20 +02:00
AuxXxilium
0775acd417 arc: rewrite build code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-29 00:18:06 +02:00
AuxXxilium
7ca13eaf89 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-28 23:02:48 +02:00
AuxXxilium
d0cbc386af arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-28 22:15:33 +02:00
AuxXxilium
d6e7da9af8 tree: rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-28 22:06:56 +02:00
AuxXxilium
e085595bf6 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 22:43:34 +02:00
AuxXxilium
a759b65cb5 tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 22:40:00 +02:00
AuxXxilium
bf2c728c6d arc: if system has only nvme disks, show only SA6400
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 22:26:38 +02:00
AuxXxilium
bf792503b6 custom: remove modules from selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 15:41:56 -04:00
AuxXxilium
f530b22232 arc: change menu ordering
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 15:21:25 -04:00
AuxXxilium
862b812a7d arc: force confdone true if builddone is true
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 15:10:20 -04:00
AuxXxilium
a0fb758acb arc: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 14:52:23 -04:00
AuxXxilium
4c81cfdedd arc: simplify code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 14:47:40 -04:00
AuxXxilium
8608b0695c arc: rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 14:45:37 -04:00
AuxXxilium
7684075e86 arc: fix build logic if model is changed
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 14:19:43 -04:00
AuxXxilium
863ca11c16 tree: simplify code and add sanity check for paturl
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 14:15:50 -04:00
AuxXxilium
f77a3b851c arc-functions: format decrypt menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 12:49:58 -04:00
AuxXxilium
9425e0773f boot: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 12:41:21 -04:00
AuxXxilium
8c8a282dc4 arc/arc-functions: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 12:23:02 -04:00
AuxXxilium
814fda8991 update: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-27 11:35:13 -04:00
AuxXxilium
ac792bedba boot: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 16:42:36 -04:00
AuxXxilium
ff2b282a09 boot: add correct version output to boot screen
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 15:27:47 -04:00
AuxXxilium
ffe51043d4 tree: rewrite more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 15:12:51 -04:00
AuxXxilium
9e34bc70f3 arc: remove custom kernel if 7.2.2 is selected
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 14:29:26 -04:00
AuxXxilium
9f2485ad00 arc: rework more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 14:22:24 -04:00
AuxXxilium
d6609e191c tree: more formatting
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 12:54:51 -04:00
AuxXxilium
7d7d719e2d tree: rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 12:47:54 -04:00
AuxXxilium
0595c78aa2 tree: fix offline file
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 12:31:52 -04:00
AuxXxilium
1a81e2d204 functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 12:25:59 -04:00
AuxXxilium
9a15f8208d tree: workaround
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 12:14:23 -04:00
AuxXxilium
b612c541ab arc: format warnings
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 11:44:50 -04:00
AuxXxilium
4542fd4ff9 arc: temp workaround part 1
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-26 11:27:53 -04:00
AuxXxilium
82e403e69c arc: check for cpufreqscaling addon
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 18:39:41 +02:00
AuxXxilium
5e7e62b9d5 arc: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 17:10:17 +02:00
AuxXxilium
b524a95ea6 tree: rewrite more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 17:06:49 +02:00
AuxXxilium
cc5ecd61c5 tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 16:46:10 +02:00
AuxXxilium
23187955dc tree: more fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 16:17:32 +02:00
AuxXxilium
37bef42f65 arc: rewrite build logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 14:38:02 +02:00
AuxXxilium
0b337ad600 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 13:58:48 +02:00
AuxXxilium
3a455c57ff arc-functions: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 10:58:56 +02:00
AuxXxilium
f6abf4d9c0 arc-functions: a bit more styling
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 10:57:17 +02:00
AuxXxilium
ed37720151 arc-functions: update menu rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 10:50:13 +02:00
AuxXxilium
271fb2e6e8 arc-functions: ask for reboot after loader update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 10:30:08 +02:00
AuxXxilium
3d67eea1b2 arc-functions: fix rebootMenu message style
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 10:27:10 +02:00
AuxXxilium
96326a3272 arc-functions: updateMenu fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-25 10:25:18 +02:00
AuxXxilium
ce386c049c init: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 21:28:48 +02:00
AuxXxilium
0423c1611e custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 21:19:48 +02:00
AuxXxilium
d58d1f5b0c tree: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 21:03:24 +02:00
AuxXxilium
daec6b60fd build: fix local build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 20:42:10 +02:00
AuxXxilium
18f42509ae arc: reorder menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 20:26:30 +02:00
AuxXxilium
1e1b41b1d9 arc: fix menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 20:17:30 +02:00
AuxXxilium
38558d4452 arc-functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 19:56:06 +02:00
AuxXxilium
646d7cef38 arc-functions: add something new
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 19:46:22 +02:00
AuxXxilium
8949e723d3 arc-functions: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 14:26:13 +02:00
AuxXxilium
5d05cdff10 arc: rework branch system
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-24 00:25:41 +02:00
AuxXxilium
8f4a9b698e arc: fix arckey value
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-23 00:34:04 +02:00
AuxXxilium
5daa656d46 arc-functions: add synoinfo for ssd cache
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-23 00:29:53 +02:00
AuxXxilium
7d9f7817af tree: fix arc patch after update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-23 00:21:08 +02:00
AuxXxilium
934b9e8fba ramdisk: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-21 23:28:24 +02:00
AuxXxilium
0c27c8d5a8 build: update 2024-08-21 18:55:20 +02:00
AuxXxilium
09148a05d3 functions: fix syntax 2024-08-21 18:55:16 +02:00
AuxXxilium
0b229c3fe9 init: fix nic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-21 18:54:56 +02:00
AuxXxilium
b46767e423 ramdisk: syntaxfix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-19 23:41:26 +02:00
AuxXxilium
f568b62685 tree: some more rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-19 21:18:23 +02:00
AuxXxilium
668c38f833 modulelist: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-19 20:51:30 +02:00
AuxXxilium
9c52d811ed arc: fix false inputed user SN
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-19 20:47:35 +02:00
AuxXxilium
84f33ed659 init: rework blacklist
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-19 18:39:18 +02:00
AuxXxilium
f8f8950799 arc: remove geoblocking for now <- until the next ... comes around
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-19 18:26:23 +02:00
AuxXxilium
b991c9d7f7 tree: try something
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-18 23:24:34 +02:00
AuxXxilium
d053c824e2 arc: fix branch selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-18 18:07:46 +02:00
AuxXxilium
91e895ac9f arc: fix module selection for custom builds
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-18 16:04:26 +02:00
AuxXxilium
a8834e0c1c functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-18 12:06:42 +02:00
AuxXxilium
c0a28c3efe custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-18 03:05:54 +02:00
AuxXxilium
19e5d34378 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-18 02:01:13 +02:00
AuxXxilium
f10ceade71 build: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-18 01:48:11 +02:00
AuxXxilium
06f4e05de4 tree: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-18 01:40:13 +02:00
AuxXxilium
eb74f7bfed arc: update make code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 21:44:50 +02:00
AuxXxilium
345fc9a106 Revert "arc-functions: do some more work"
This reverts commit 9b99315c02.
2024-08-17 19:27:14 +02:00
AuxXxilium
9b99315c02 arc-functions: do some more work
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 19:10:05 +02:00
AuxXxilium
2bd5354f75 block: remove es from geoblocking
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 18:40:04 +02:00
AuxXxilium
0f3c6c4092 arc: decrypt rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 17:38:23 +02:00
AuxXxilium
2b4f06496e block: spain also from usage
(spainish user can say thanks to apriliars3 / Miguel Angel)

Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 17:20:56 +02:00
AuxXxilium
40cb99762c boot: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 16:22:22 +02:00
AuxXxilium
6124e562c5 boot: more fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 15:55:04 +02:00
AuxXxilium
149db87a0c boot: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 15:47:14 +02:00
AuxXxilium
6640aa1f52 functions: add region block
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-17 00:21:04 +02:00
AuxXxilium
8e0eebf817 boot: fix pvscsi
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-16 23:57:41 +02:00
AuxXxilium
4dd6a0b6bc functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-16 23:57:26 +02:00
AuxXxilium
b36aafd7e4 ramdisk: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-16 23:57:09 +02:00
AuxXxilium
b30456aa91 compat: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-16 23:56:55 +02:00
AuxXxilium
bfae54a8b5 build: fix branch
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-16 15:47:38 +02:00
AuxXxilium
3d9c6043bf build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-15 21:12:07 +02:00
AuxXxilium
519026cf2d functions: update 2024-08-15 12:56:18 +02:00
AuxXxilium
68a996c776 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-14 21:30:23 +02:00
AuxXxilium
7eff59a8cf build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-14 20:14:47 +02:00
AuxXxilium
03f5ce953e tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-14 20:05:37 +02:00
AuxXxilium
14925c2cf5 arc: remove arc patch from image
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-14 19:15:01 +02:00
AuxXxilium
41d9b805bf build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-14 19:14:23 +02:00
AuxXxilium
c7d29e79ba update: fix output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-14 19:14:14 +02:00
AuxXxilium
4f981aea94 ramdisk: fix 2024-08-14 12:25:47 +02:00
AuxXxilium
8f5a1042a9 build: fix clean
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-14 10:45:50 +02:00
AuxXxilium
d2f4bcf7d7 tree: some fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-13 19:47:32 +02:00
AuxXxilium
e8b7e4ca28 tree: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-11 17:02:06 +02:00
AuxXxilium
72ac648ad2 arc: remove force addons
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-10 23:51:12 +02:00
AuxXxilium
26fba39441 tree: fix boot and other functions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-09 16:00:41 +02:00
AuxXxilium
e9dc78b35d build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-08 15:17:01 +02:00
AuxXxilium
77806ea713 update: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-08 15:14:44 +02:00
AuxXxilium
bdf28ff2a8 arc-functions: fix branch selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-08 14:47:40 +02:00
AuxXxilium
cce41aa9d4 readme: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-08 13:52:58 +02:00
AuxXxilium
1cb8bf76f1 tree: fix proxmox/unraid boot issue
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-08 13:48:38 +02:00
AuxXxilium
abac77944a build: add all function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-08 13:41:22 +02:00
AuxXxilium
2947e57497 build: fix local
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-08 13:37:44 +02:00
AuxXxilium
23d56ece85 build: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-07 20:34:00 +02:00
AuxXxilium
f0de26f9b0 arc-functions: fix format/clone
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-07 19:49:29 +02:00
AuxXxilium
fa1f8e8420 tree: fix typos
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-07 17:08:13 +02:00
AuxXxilium
0fecccf852 build: fix local
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-06 23:37:35 +02:00
AuxXxilium
5d35673184 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-06 22:58:23 +02:00
AuxXxilium
63d2573f2c tree: fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-06 21:01:04 +02:00
AuxXxilium
498da3d502 grub: disable aspm again
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-06 14:15:48 +02:00
AuxXxilium
147acc3f57 arc-functions: change sysinfo ordering
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-06 13:53:13 +02:00
AuxXxilium
1ddad28dea arc-functions: remove sysinfo line if empty
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-06 13:51:02 +02:00
AuxXxilium
2bfced0ca8 tree: rewrite versions and build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-06 13:03:04 +02:00
AuxXxilium
b04c40c23c arc: if nondt and portmap user selected, check for config values
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-04 14:32:18 +02:00
AuxXxilium
90065f509f update: fix fullupgrade for "s" version
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 21:42:49 +02:00
AuxXxilium
cbb55ac160 grub: back to old cmdline (need more checks)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 15:52:47 +02:00
AuxXxilium
b09f30f399 boot: add warning if connection IP isn't found
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 15:39:01 +02:00
AuxXxilium
e07b053226 boot: enable latest kexec related changes only if kexec is enabled
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 15:36:36 +02:00
AuxXxilium
3d2874b2be arc: expand dynamic mode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 14:16:55 +02:00
AuxXxilium
8a9c7d44b7 arc-functions: rewrite power menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 14:07:38 +02:00
AuxXxilium
45001d77c3 arc-functions: silent efibootmgr
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 14:06:04 +02:00
AuxXxilium
f4bc5be100 tree: more fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 14:03:10 +02:00
AuxXxilium
8c81d06b7c functions: call exec
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 13:36:30 +02:00
AuxXxilium
a8e0a80349 boot: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 13:34:27 +02:00
AuxXxilium
50ec2de0b6 arc: rewrite message
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 13:31:42 +02:00
AuxXxilium
374c165ee1 arc: rework dynamic mode to dev branch
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 13:30:04 +02:00
AuxXxilium
4f0f912de7 functions: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 13:17:50 +02:00
AuxXxilium
afcd73a659 tree: more rewrite for dynamic mode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 13:05:27 +02:00
AuxXxilium
f1ee8042dd arc: fix dynmic path
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:58:53 +02:00
AuxXxilium
88e4a250db arc-functions: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:57:45 +02:00
AuxXxilium
145adabcaf arc: show warning in red
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:56:11 +02:00
AuxXxilium
d605e58e74 init: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:55:32 +02:00
AuxXxilium
138148ddb4 arc: cleanup files after dynamic loading
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:50:20 +02:00
AuxXxilium
0f83e1b786 arc: more work for dynamic mode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:48:54 +02:00
AuxXxilium
14a2c97d84 arc-functions: extend update menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:29:02 +02:00
AuxXxilium
ca78453816 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:17:13 +02:00
AuxXxilium
7c9811229e build: fix local build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-03 12:12:46 +02:00
AuxXxilium
0b7baa07de build: remove vhdx from s version
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 21:52:19 +02:00
AuxXxilium
0b74f57dab build: fix autobuild
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 21:48:59 +02:00
AuxXxilium
6dc5823706 build: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 21:43:04 +02:00
AuxXxilium
72bb5133e6 grub: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 21:42:57 +02:00
AuxXxilium
b0d370ee30 build: modify
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 21:05:34 +02:00
AuxXxilium
5e10296de9 boot: remove duplicated exit
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 20:31:56 +02:00
AuxXxilium
ca1c372d43 arc: add dynamic mode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 20:10:43 +02:00
AuxXxilium
4c64123cc2 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 19:52:10 +02:00
AuxXxilium
3a29084e6e tree: add back branches x/s
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 19:48:35 +02:00
AuxXxilium
74e7294491 update: add custom to update section
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 19:12:14 +02:00
AuxXxilium
48c66303af arc-functions: fix missing
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 19:08:11 +02:00
AuxXxilium
7dddfe463c build: load custom from it's own repo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 18:28:15 +02:00
AuxXxilium
4162d718ae custom: move to new location
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 18:23:15 +02:00
AuxXxilium
a9452afe2c readme: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-08-02 18:22:30 +02:00
AuxXxilium
2242c9d8d2 grub: enhance loader disk to 2GB
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:45:28 +02:00
AuxXxilium
19528cb453 grub: match synoboot partition size
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:29:50 +02:00
AuxXxilium
a20a00e420 arc-functions: rewrite greplogs
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:29:40 +02:00
AuxXxilium
94c1174771 tree: remove arc branches (s/x)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:29:35 +02:00
AuxXxilium
987f499ad7 grub: rework and add todo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:29:31 +02:00
AuxXxilium
71ed24972a boot: rewrite order
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:29:13 +02:00
AuxXxilium
5c309ee4f0 arc/boot: add exit code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:29:11 +02:00
AuxXxilium
9f6ec3e219 scripts: add back grub
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:29:06 +02:00
AuxXxilium
ed099257e7 arc: cleanup cmdline after model switch
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-31 20:29:01 +02:00
AuxXxilium
bb89a21b17 ramdisk: fix 2024-07-30 20:32:35 +02:00
AuxXxilium
f27324c152 arc-functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-30 20:30:56 +02:00
AuxXxilium
a12d7726bb ramdisk: fix SA6400
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-30 17:22:30 +02:00
AuxXxilium
6180f1a933 tree: bugfix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-30 17:13:12 +02:00
AuxXxilium
73a72774cd update: fix fullupgrade for "s" version
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-29 23:09:50 +02:00
AuxXxilium
1d582d8e0c tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-29 23:04:28 +02:00
AuxXxilium
e4307368f4 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-28 20:05:42 +02:00
AuxXxilium
019fb71253 tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-26 23:48:55 +02:00
AuxXxilium
e883a0b43f tree: changes for compatibility
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-26 23:26:52 +02:00
AuxXxilium
c288e229fb build: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-26 23:18:48 +02:00
AuxXxilium
248aafbd11 build: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-26 21:04:53 +02:00
AuxXxilium
ae7318a883 build: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-26 20:12:56 +02:00
AuxXxilium
89746196ee init: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-26 19:00:55 +02:00
AuxXxilium
5aadfd792b build: rework build system
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-26 18:50:05 +02:00
AuxXxilium
68ca715f7a tree: full rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-26 16:57:14 +02:00
AuxXxilium
3a28bf0ee9 arc: fix spaces
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-25 21:17:55 +02:00
AuxXxilium
9574727c71 arc: remove ipv6 switch and enable it globally
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-25 17:18:54 +02:00
AuxXxilium
6dc044aec0 tree: multiple fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-25 17:17:14 +02:00
AuxXxilium
03bc810fa0 arc-functions: add more informations to sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-23 19:41:03 +02:00
AuxXxilium
7015dbe2e1 tree: activate latest changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 22:12:38 +02:00
AuxXxilium
afa15a1615 grub: add memtest
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 20:47:04 +02:00
AuxXxilium
326c6d0985 configFile: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 20:46:50 +02:00
AuxXxilium
542c5a1017 boot: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 20:46:40 +02:00
AuxXxilium
58a46bf753 grub: rename
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 16:02:52 +02:00
AuxXxilium
c3592c3756 build: cleanup local
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 15:48:31 +02:00
AuxXxilium
61dd7f0d7c network: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 15:47:45 +02:00
AuxXxilium
935f77255f arc: add warning
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 15:40:42 +02:00
AuxXxilium
0855c5b218 boot: rewrite nic logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 15:32:35 +02:00
AuxXxilium
0524f92c73 boot: fix NIC amount
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 15:16:07 +02:00
AuxXxilium
bd8e23f125 arc: remove amepatch if arc patch is false
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 14:20:57 +02:00
AuxXxilium
d513e63c59 update: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 12:45:05 +02:00
AuxXxilium
2049102139 menu: simplify
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 11:40:18 +02:00
AuxXxilium
6faa0a6632 arc: fix update loader
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-21 11:30:49 +02:00
AuxXxilium
b58cfa5ae1 arc: fix model table
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-20 12:28:38 +02:00
AuxXxilium
1ab6d16be3 arc: change info window size in model selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-20 11:34:42 +02:00
AuxXxilium
544f14589f ramdisk: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-18 18:47:19 +02:00
AuxXxilium
c2ce4b4677 build: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-18 18:46:48 +02:00
AuxXxilium
9cbd12a7dc arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-18 18:46:33 +02:00
AuxXxilium
928fc825aa custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-18 18:17:17 +02:00
AuxXxilium
8de7f55b28 tree: finalize changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-18 18:15:01 +02:00
AuxXxilium
e523a66522 arc: reduce code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 18:43:50 +02:00
AuxXxilium
a5a55b6269 arc: fix igpu text in modellist
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 18:36:45 +02:00
AuxXxilium
9193cd7c40 arc: SA6400 remove from list if raid controller is found
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 17:38:34 +02:00
AuxXxilium
cd20c3bba0 information: rewrite i915 text
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 17:37:08 +02:00
AuxXxilium
9467bd1431 information: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 17:21:35 +02:00
AuxXxilium
f385460425 build: more changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 17:11:48 +02:00
AuxXxilium
91b26d3556 build: set stable br
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 16:31:12 +02:00
AuxXxilium
7fc268188f build: more changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 16:20:14 +02:00
AuxXxilium
4978a1727d build: new version format
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 16:17:22 +02:00
AuxXxilium
ce8148ab3e update: add version check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 16:16:50 +02:00
AuxXxilium
0171dcd9ee boot: x2apic - global disable
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-17 16:16:29 +02:00
AuxXxilium
63d8125895 grub: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-14 16:08:19 +02:00
AuxXxilium
0529e65181 grub: remove update mode if loader isn't build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-14 16:03:40 +02:00
AuxXxilium
2f0f429dfa grub: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-14 15:57:19 +02:00
AuxXxilium
354f92dd91 grub: fix rebuild
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-14 13:41:15 +02:00
AuxXxilium
04369acb50 arc/arc-functions: rewrite text
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-14 10:21:08 +02:00
AuxXxilium
2f49981d01 arc: begin work for next changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-13 19:48:44 +02:00
AuxXxilium
4695813e50 tree: rework automated
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-13 18:07:43 +02:00
AuxXxilium
aa714f49c4 grub: test
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-13 16:51:10 +02:00
AuxXxilium
41dd869f0c arc-functions: key transform lower upper
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-13 15:36:46 +02:00
AuxXxilium
1626103849 custom: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-12 21:13:50 +02:00
AuxXxilium
4d7512c53f custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-12 21:11:49 +02:00
AuxXxilium
fd0a9810f3 arc-functions: sysinfo cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-12 21:09:17 +02:00
AuxXxilium
128c3e7ec2 modulelist: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-12 20:56:25 +02:00
AuxXxilium
045352d5f7 arc: rewrite arc patch message
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-12 20:41:47 +02:00
AuxXxilium
38f1318b8f tree: full rework for config compatibility
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-12 18:02:47 +02:00
AuxXxilium
bd75ecab30 arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-11 00:36:15 +02:00
AuxXxilium
48169de420 arc: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-11 00:34:51 +02:00
AuxXxilium
462bf9396c arc: update make steps
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-08 21:27:29 +02:00
AuxXxilium
3957bfeb13 arc: remove modules write to dsm, can be used from inside modules submenu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-08 21:17:46 +02:00
AuxXxilium
39764a5ccf arc-functions: rename external controller
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-08 21:08:59 +02:00
AuxXxilium
de69d60290 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-08 21:08:43 +02:00
AuxXxilium
0a2ddad16a Revert "Auxiliary commit to revert individual files from 56d2fba4dd6f8baa8d813f49bac540681af90c46"
This reverts commit f41e5e635e6fc9c411399bf60243f2b27a677e5f.

Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 21:46:07 +02:00
AuxXxilium
5ba0d0d673 arc-functions: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 20:35:19 +02:00
AuxXxilium
56d2fba4dd tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 20:27:17 +02:00
AuxXxilium
e8bd33d383 boot: rewrite logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 19:49:57 +02:00
AuxXxilium
a87d70e3d8 arc-functions: more logic rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 19:48:15 +02:00
AuxXxilium
d663e00df7 arc-functions: cmdline menu optimize logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 19:41:29 +02:00
AuxXxilium
b3e5e16f5b arc-functions: rework StoragePanel Options
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 19:39:04 +02:00
AuxXxilium
8f991cec67 arc-functions: fix cmdline menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 19:33:46 +02:00
AuxXxilium
f422a83c08 arc-functions: fix synoinfo menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 19:25:52 +02:00
AuxXxilium
82b787c223 arc: reorder menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 16:40:29 +02:00
AuxXxilium
5f301893ea update: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 11:32:53 +02:00
AuxXxilium
536d18a946 arc: fix initial offlinecheck
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 11:07:30 +02:00
AuxXxilium
e802789da8 arc: show status for screeen off
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 10:52:14 +02:00
AuxXxilium
ea9c7526d2 arc: offlinemode rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 10:45:36 +02:00
AuxXxilium
4ad6f52ed9 functions: rework offline check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 10:23:55 +02:00
AuxXxilium
27d82d58cf arc: only show addon options if addon is selected
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-06 00:39:56 +02:00
AuxXxilium
91a94b2824 arc: notify while switching to custom kernel
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-05 23:54:24 +02:00
AuxXxilium
9bfe65de07 tree: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-05 23:27:09 +02:00
AuxXxilium
fd7a433d10 init/functions: fix loader disk bus
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 22:08:50 +02:00
AuxXxilium
c799f465a9 arc/arc-functions: rewrite power menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 21:58:23 +02:00
AuxXxilium
8f0cab1764 arc-functions: add bootdisk and bus to sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 21:45:13 +02:00
AuxXxilium
bee4a5d24b arc: fix automated build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 21:34:12 +02:00
AuxXxilium
baf76f4fc8 arc: remove functions need online connection while offline mode is true
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:53:56 +02:00
AuxXxilium
7c1118cf1b arc: ipv6 switch rewrite logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:50:34 +02:00
AuxXxilium
1cd953b82f arc: fix ipv6 switch
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:49:19 +02:00
AuxXxilium
bf5ed142bc functions: more logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:43:21 +02:00
AuxXxilium
575cc9e40f functions: rework logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:40:25 +02:00
AuxXxilium
4d4a5fd980 tree: rework IV
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:37:50 +02:00
AuxXxilium
db6e493a2d tree: bugfix III
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:12:29 +02:00
AuxXxilium
e186af796d tree: bugfix II
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:05:05 +02:00
AuxXxilium
f01316934f tree: bugfix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-04 20:00:05 +02:00
AuxXxilium
1469146291 boot: recheck bus
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-03 21:03:13 +02:00
AuxXxilium
8be8973f16 functions: reset getbus
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-03 20:51:07 +02:00
AuxXxilium
ccafa47ad7 ramdisk: remove dot from output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-03 18:54:15 +02:00
AuxXxilium
356b470690 arc-functions: remove additional space in sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-03 17:45:03 +02:00
AuxXxilium
79a5e46306 boot: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-03 17:39:59 +02:00
AuxXxilium
fedd090fd4 init/boot: wait a second more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-03 17:00:58 +02:00
AuxXxilium
834abaf73f boot: rework nic logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-03 16:59:22 +02:00
AuxXxilium
1d0dae281b arc: a bit more work
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 21:38:30 +02:00
AuxXxilium
359d0ae806 boot: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 20:33:23 +02:00
AuxXxilium
6209273d10 arc: fix model selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 20:26:13 +02:00
AuxXxilium
17ac74309e arc: add reboot message to ipv6 switch
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 20:15:38 +02:00
AuxXxilium
306c7f8c41 init: revert force restart dhcp
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 20:12:24 +02:00
AuxXxilium
9f3928ecfd tree: some fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 19:49:09 +02:00
AuxXxilium
4bbbebd3c9 arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 19:08:08 +02:00
AuxXxilium
351b75eceb functions: finalize changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 18:57:34 +02:00
AuxXxilium
c1aa1b23b2 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 18:55:31 +02:00
AuxXxilium
491531f19c init: force dhcp restart
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 18:53:48 +02:00
AuxXxilium
01dbfe92dc arc: rework III
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 16:33:11 +02:00
AuxXxilium
82066f3267 arc: rework II
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-02 16:03:22 +02:00
AuxXxilium
e1fa72058e storage: update description
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 21:10:18 +02:00
AuxXxilium
52a409a846 arc: fix cpu governor
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 20:53:55 +02:00
AuxXxilium
8d8454ebd4 arc: fix model selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 20:34:41 +02:00
AuxXxilium
9980ac3f6c arc: syntax fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 20:26:07 +02:00
AuxXxilium
b76ee77ad0 arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 20:12:52 +02:00
AuxXxilium
cbb9df360e arc: error if user exit
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 20:11:26 +02:00
AuxXxilium
f936e463c9 arc: rewrite model selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 20:07:10 +02:00
AuxXxilium
c0fe877adc ramdisk: predefine values
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 19:58:02 +02:00
AuxXxilium
60c38fa781 arc-functions: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 19:44:57 +02:00
AuxXxilium
50bee6f3c7 arc: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 19:26:51 +02:00
AuxXxilium
d97b820cd6 arc: sync menu to wiki
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 18:13:14 +02:00
AuxXxilium
42d9d6be5f boot: reactivate sdcard in dsm
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-07-01 17:47:37 +02:00
AuxXxilium
79391ac86c ramdisk: add cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-30 20:04:49 +02:00
FulcrumCode
3f9e351132 readme: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-30 12:47:35 +02:00
AuxXxilium
4e31dda1de arc: menu update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-30 11:44:04 +02:00
AuxXxilium
f519c386a1 tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-30 10:31:51 +02:00
AuxXxilium
9a14abbab6 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-30 10:10:22 +02:00
AuxXxilium
875376902e custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 20:25:08 +02:00
AuxXxilium
a47bdc1ba7 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 20:21:41 +02:00
AuxXxilium
948ca437c0 arc-functions: update format disks
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 20:07:43 +02:00
AuxXxilium
cab97f130f init: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 16:04:36 +02:00
AuxXxilium
eb6336e49c arc: do more work
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 15:39:23 +02:00
AuxXxilium
878dc47783 arc: change memory syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 14:25:15 +02:00
AuxXxilium
67a4046d8f tree: remove usbale from memory showing
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 14:22:27 +02:00
AuxXxilium
bb4dfec3fa boot: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 14:21:04 +02:00
AuxXxilium
e5a9516f73 boot: change more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 14:18:45 +02:00
AuxXxilium
e2fca9a2f3 tree: rewrite more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 14:15:09 +02:00
AuxXxilium
233f7cc1d7 arc: force decrypt if old config has arc patch true
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 14:08:35 +02:00
AuxXxilium
a326a3b733 tree: try something new
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 14:05:20 +02:00
AuxXxilium
4939ea332a arc: fix model window
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 12:34:04 +02:00
AuxXxilium
bd9a33056f arc: move more checks to functions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 10:58:05 +02:00
AuxXxilium
10ccbfb342 build: add br_version to output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 10:30:18 +02:00
AuxXxilium
07a8376ffa arc: add keymap to update output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 10:26:21 +02:00
AuxXxilium
401d46d923 arc: move checks to functions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 10:21:41 +02:00
AuxXxilium
b424d25fe1 arc: fix keymap automation
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-29 10:11:12 +02:00
AuxXxilium
b116610e48 arc: readd module write dsm
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 22:37:15 +02:00
AuxXxilium
1bd2c75265 arc: rename "update" to "update loader"
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 22:27:40 +02:00
AuxXxilium
bd2540d740 arc-functions: add secure boot to sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 22:27:22 +02:00
AuxXxilium
477a3d335b arc: reset conf/build if key is entered
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 21:22:56 +02:00
AuxXxilium
243dbac376 arc: remove cpu brand from selection (causing irritation my some user)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 20:43:57 +02:00
AuxXxilium
fd2d2ca939 arc: more fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 20:41:44 +02:00
AuxXxilium
8f0943fb82 arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 20:23:40 +02:00
AuxXxilium
edd58ac378 arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 20:02:43 +02:00
AuxXxilium
609248c519 arc: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 20:00:08 +02:00
AuxXxilium
35ade9f672 arc-functions: clean function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 19:54:28 +02:00
AuxXxilium
3480529b39 tree: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 19:51:45 +02:00
AuxXxilium
46f750bab2 init: add compatmode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 17:38:22 +02:00
AuxXxilium
a3bf814b26 build: rewrite message
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 15:15:03 +02:00
AuxXxilium
2c5c8e4684 consts: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 15:08:01 +02:00
AuxXxilium
b1cecfc19c update: fix dependecies
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 15:01:00 +02:00
AuxXxilium
462ba91d4f init/boot: ip fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-28 14:28:39 +02:00
AuxXxilium
ecf9bc8f74 init: add dhcp restart (only for testing)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 22:11:14 +02:00
AuxXxilium
5377eb0e72 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 21:18:44 +02:00
AuxXxilium
2d8a1ba006 arc-functions: add modulelist options
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 21:18:39 +02:00
AuxXxilium
76be9c05fb arc: rename menu entry
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 20:23:16 +02:00
AuxXxilium
2adcef7e40 boot: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 20:19:38 +02:00
AuxXxilium
6adb83f253 arc: remove loaded module write
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 19:51:45 +02:00
AuxXxilium
2c1bab8602 boot: rewrite mac related
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 19:48:05 +02:00
AuxXxilium
7f5ca9ac43 arc: rewrite more texts
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 19:16:25 +02:00
AuxXxilium
74939772bb arc: fix edit user config
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 19:10:46 +02:00
AuxXxilium
b0405f5030 tree: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 19:05:46 +02:00
AuxXxilium
88ce78bbde arc: remove empty line from sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 18:57:43 +02:00
AuxXxilium
e1f8c285a7 tree: rewrite mac
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 18:46:03 +02:00
AuxXxilium
cedbc1393e custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 18:25:24 +02:00
AuxXxilium
b36b2880ba tree: rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-27 18:11:29 +02:00
AuxXxilium
db0c69520e arc/network: fix user mac setting
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-26 20:55:02 +02:00
AuxXxilium
f2117fe5bb tree: do some rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-26 20:07:31 +02:00
AuxXxilium
1aedb8eaae boot: add intel pstate fix for acpi
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-26 19:41:09 +02:00
AuxXxilium
f4ee86857a arc: rework menu and network related
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 21:50:40 +02:00
AuxXxilium
8c21ad284d network: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 21:20:23 +02:00
AuxXxilium
72e3f0ab63 tree: more config rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 21:10:06 +02:00
AuxXxilium
7d8c17c09d arc: update model selection and reduce code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 20:24:26 +02:00
AuxXxilium
f604c2ded5 init: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 19:12:17 +02:00
AuxXxilium
2162990007 boot: rewrite for some users they don't understand what is shown
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 18:45:20 +02:00
AuxXxilium
13db1340f2 arc: extend sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 18:29:54 +02:00
AuxXxilium
3f14098ac3 tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 17:03:38 +02:00
AuxXxilium
89c895c868 arc-functions: edit credits
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 16:34:41 +02:00
AuxXxilium
15eea1e4e6 tree: fix missing
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-25 16:29:55 +02:00
AuxXxilium
caa6007555 init/boot: final output fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 21:39:46 +02:00
AuxXxilium
362ad1b8f7 custom: update build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 21:29:52 +02:00
AuxXxilium
25500dfbc5 tree: fix typos
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 21:14:42 +02:00
AuxXxilium
b8e6648ea9 arc: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 21:05:22 +02:00
AuxXxilium
b4f45592e0 boot: fix output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 20:51:23 +02:00
AuxXxilium
bd4737eb6a arc: fix cpufreq for non acpi systems
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 20:24:12 +02:00
AuxXxilium
aa2ffbd249 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 20:18:09 +02:00
AuxXxilium
62ff3b402e boot: fix mem shown
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 20:14:04 +02:00
AuxXxilium
5b6d06a850 arc: add staticip for dsm and loader
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 20:12:00 +02:00
AuxXxilium
e07005de67 tree: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-24 18:36:22 +02:00
AuxXxilium
3453046c67 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 23:46:09 +02:00
AuxXxilium
81152b4a79 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 23:43:17 +02:00
AuxXxilium
023280fb64 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 16:28:05 +02:00
AuxXxilium
0cf81cb232 arc-functions: add reinit to menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 16:18:56 +02:00
AuxXxilium
c764bb7d3d ramdisk: change acpi check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 14:00:45 +02:00
AuxXxilium
f2c808891c arc: don't override keymap
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 12:30:57 +02:00
AuxXxilium
cc0dc3ad8b ramdisk: add mountloader
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 12:24:18 +02:00
AuxXxilium
ccbdf7e243 tree: rework functions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 12:23:10 +02:00
AuxXxilium
8adeb6cc30 init: disable dhcp restart
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 12:14:04 +02:00
AuxXxilium
a3fe5a7b41 build: remove changelog
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 11:27:53 +02:00
AuxXxilium
32fe78d1ab build: add time to output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 11:24:22 +02:00
AuxXxilium
b247348f3c arc/arc-functions: add restart network trigger
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 10:51:40 +02:00
AuxXxilium
330a555147 build: add buildroot version
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-23 10:31:13 +02:00
AuxXxilium
97bfea622a update: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 21:50:41 +02:00
AuxXxilium
a050a3703c arc-functions: add format to cmdline/synoinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 21:47:04 +02:00
AuxXxilium
647b627dc0 arc: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 21:37:24 +02:00
AuxXxilium
a91fc93154 arc: reduce and fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 21:31:34 +02:00
AuxXxilium
1591b1c681 arc: rewrite primary nic function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 17:15:10 +02:00
AuxXxilium
9ecf811587 arc: add arcnic "auto" selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 16:33:43 +02:00
AuxXxilium
3e6a7c5070 arc: change beta to source
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 15:58:39 +02:00
AuxXxilium
5a0d6bb3f9 arc: update model selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 15:40:06 +02:00
AuxXxilium
7afdc5a752 init: restart dhcp to get ip
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-22 13:14:44 +02:00
AuxXxilium
57af810bcc arc: add recommended option
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 23:34:02 +02:00
AuxXxilium
067c2d4f71 arc: fix ntp
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 22:04:06 +02:00
AuxXxilium
a666cffcfd arc-functions: fix exit to shell
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 21:12:10 +02:00
AuxXxilium
fa106cca9a grub: set resolution to auto
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 21:06:54 +02:00
AuxXxilium
5b4e7079c4 ramdisk: revert more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 20:21:07 +02:00
AuxXxilium
de61794a07 tree: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 20:11:22 +02:00
AuxXxilium
da227b258d build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 19:58:15 +02:00
AuxXxilium
ba06df22ea ramdisk: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 19:42:15 +02:00
AuxXxilium
f9b0d8c29d ramdisk: revert
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 19:37:07 +02:00
AuxXxilium
3d3509e023 grub: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 19:23:33 +02:00
AuxXxilium
464bee51e0 tree: more work
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 16:11:53 +02:00
AuxXxilium
550a966b6b custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 15:37:11 +02:00
AuxXxilium
f81a84106c arc: syntax fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 15:34:27 +02:00
AuxXxilium
e507b66033 arc: add new functions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 15:32:43 +02:00
AuxXxilium
0eaeae5b20 arc: add powersave governor
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-21 15:12:07 +02:00
AuxXxilium
18c7782477 arc: reorder build steps
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-20 20:52:41 +02:00
AuxXxilium
50c34f4d20 arc: add conservative
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-20 20:45:13 +02:00
AuxXxilium
811746c927 build: back to 1G (will readd version with more space later)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-20 20:44:51 +02:00
AuxXxilium
7c0305aa37 arc: rework cpu frequency scaling support
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-20 18:46:49 +02:00
AuxXxilium
bbc667f3a6 arc: rewrite updatecheck
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-19 19:56:23 +02:00
AuxXxilium
292b319730 build: change order to get files
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-19 17:55:57 +02:00
AuxXxilium
f999ad2821 tree: rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-19 17:45:46 +02:00
AuxXxilium
430a2bd00c build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-18 22:29:56 +02:00
AuxXxilium
de12fa6282 build: update local
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-18 18:47:27 +02:00
AuxXxilium
03b85b2474 init/boot: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-18 17:58:12 +02:00
AuxXxilium
0ca5c7cdc1 init/boot: remove wol from arc boot
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-18 17:44:19 +02:00
AuxXxilium
3614986677 boot: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-18 17:42:35 +02:00
AuxXxilium
4dece9d9b0 arc: syntax fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-17 21:38:48 +02:00
AuxXxilium
686a5d225d arc: fix msgbox
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-17 20:52:06 +02:00
AuxXxilium
43f536a3f9 arc-functions: more sysinfo informations
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-17 20:37:34 +02:00
AuxXxilium
e89d87086a arc-functions: reduce sysinfo lines
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-17 19:53:49 +02:00
AuxXxilium
d3843f2b31 arc-functions: add more synoinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-17 18:37:22 +02:00
AuxXxilium
1a1afb9abf arc: add copy for modules loaded in arc
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-17 18:02:32 +02:00
AuxXxilium
02877c7793 arc/storage: rename StorageMap to Sata Portmap
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-15 14:03:19 +02:00
AuxXxilium
684f23d72f storage: fix warning
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-15 13:56:57 +02:00
AuxXxilium
f01a38f003 arc-functions: more changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-15 13:45:38 +02:00
AuxXxilium
75e70c9fbb arc: reorder menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-15 13:36:54 +02:00
AuxXxilium
2751771b75 arc/arc-functions: more rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-15 13:31:11 +02:00
AuxXxilium
784bd4f181 arc-functions: add sequentialio menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-15 13:15:37 +02:00
AuxXxilium
acf242b3a9 arc: rework menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-15 13:15:21 +02:00
AuxXxilium
0fe9e2a405 update: reset arc key
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 20:23:39 +02:00
AuxXxilium
2921bee62c arc-functions: fix decrypt
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 20:19:13 +02:00
AuxXxilium
4613992098 init: remove sleep
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 19:56:21 +02:00
AuxXxilium
7f0efa4b6d init/boot: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 19:45:04 +02:00
AuxXxilium
a8241128df custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 19:44:43 +02:00
AuxXxilium
db81cb490b tree: rework more features
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 17:34:49 +02:00
AuxXxilium
ad1b0d2d1f arc-functions: rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 17:20:25 +02:00
AuxXxilium
286acb6821 arc: fix false bus read
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 16:14:13 +02:00
AuxXxilium
3e826561ae init: stop dhcp if static ip is set
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-14 15:41:51 +02:00
AuxXxilium
95df71ad10 init: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 23:01:04 +02:00
AuxXxilium
b9e478292a tree: more cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 21:24:14 +02:00
AuxXxilium
db85294724 init/boot: more cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 20:49:09 +02:00
AuxXxilium
055b37d2e3 tree: cleanup more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 20:33:42 +02:00
AuxXxilium
76e248f02d tree: rewrite lkm path
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 20:19:28 +02:00
AuxXxilium
b7bc607e0e functions: more rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 20:13:20 +02:00
AuxXxilium
9bf7e375ee boot/functions: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 20:07:48 +02:00
AuxXxilium
cd762d8d0f tree: rewrite grub related
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 19:57:28 +02:00
AuxXxilium
f8cbc01cb9 init: test
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 19:49:55 +02:00
AuxXxilium
0aa31b59ad init: fix paths
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-13 19:46:12 +02:00
AuxXxilium
71391e3b8d arc: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-12 18:48:41 +02:00
AuxXxilium
d340f3eeaf arc-functions: fix grep logs
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-12 17:35:40 +02:00
AuxXxilium
f086ec46ab arc: remove SA6400 from list if SCSI controller are found
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-12 17:34:45 +02:00
AuxXxilium
8f32bb70df tree: rewrite features
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-12 17:23:32 +02:00
Christian
54f59c71f4 arc: fix ram showing 2024-06-12 07:18:08 +02:00
AuxXxilium
552dce6431 arc: fix summary
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-11 21:05:18 +02:00
AuxXxilium
5c99aa2215 build: resize local builds
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-11 20:38:27 +02:00
AuxXxilium
d745df0978 arc: extend data partition to 2G (need to replace bootimage at all)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-11 19:17:41 +02:00
AuxXxilium
a2b34bd3cd build: update to latest features
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-11 18:55:28 +02:00
AuxXxilium
113cd2c92e build: add new features
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-11 18:53:47 +02:00
AuxXxilium
53caba0c78 init: add missing
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-11 18:23:46 +02:00
AuxXxilium
e2c90b8481 tree: bugfix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-11 17:50:42 +02:00
AuxXxilium
dca32f571f custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-11 17:49:25 +02:00
AuxXxilium
0e39205b4f ramdisk-patch: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-09 14:13:15 +02:00
AuxXxilium
f4fae21a81 arc-functions: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-09 14:12:03 +02:00
AuxXxilium
f1887e2fc8 sxtorage: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 20:49:48 +02:00
AuxXxilium
b3c806bcd8 build: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 19:51:07 +02:00
AuxXxilium
e51d914a54 arc: move pat data write
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 19:06:45 +02:00
AuxXxilium
1084cee1c5 arc-functions: do not show amepatch if loader is offline
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 18:10:42 +02:00
AuxXxilium
e31cb6f5c2 boot: set boottimer to 5
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 18:05:13 +02:00
AuxXxilium
6a11610cc8 arc: rework online detection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 17:59:08 +02:00
Christian
ae5b44048b arc: set eth0 to default is offline
Signed-off-by: Christian <info@auxxxilium.tech>
2024-06-08 17:49:38 +02:00
AuxXxilium
cda52a9037 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 16:28:28 +02:00
AuxXxilium
3b01bb3f9d arc-functions: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 16:27:03 +02:00
AuxXxilium
74aa8b93a5 readme: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 15:57:12 +02:00
AuxXxilium
ba36dc36a1 arc: add keymap to headline
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 15:08:39 +02:00
AuxXxilium
7db988dccc arc: automate more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 14:40:41 +02:00
AuxXxilium
1e973001db storage: silence output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 14:28:55 +02:00
AuxXxilium
4ad9eb98bf arc-functions: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 11:33:27 +02:00
AuxXxilium
24a7deb0b9 arc: logic fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-08 11:27:44 +02:00
AuxXxilium
ff53f97758 arc: silence ntp
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-07 22:09:46 +02:00
AuxXxilium
2ebf53c908 init/boot: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-07 21:56:38 +02:00
AuxXxilium
6d0295a1cf tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-07 21:50:40 +02:00
AuxXxilium
d344504a93 tree: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-07 21:43:01 +02:00
AuxXxilium
18a64e56e2 tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-07 19:30:23 +02:00
AuxXxilium
97737d4d61 arc: rewrite online check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-07 19:17:41 +02:00
AuxXxilium
20830376c4 arc: add back max_mem_mb setting
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 21:27:44 +02:00
AuxXxilium
25aa24cd6f init: fix primary nic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 21:15:06 +02:00
AuxXxilium
6aad4217f4 grub: rename
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 19:56:11 +02:00
AuxXxilium
dfec5ba547 arc: rework custom logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 19:51:46 +02:00
AuxXxilium
b45a0415af tree: more rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 17:13:32 +02:00
AuxXxilium
5417b7d548 arc: rework menu
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 16:45:59 +02:00
AuxXxilium
3512512e28 tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 16:29:26 +02:00
AuxXxilium
eca0296c36 arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 16:09:10 +02:00
AuxXxilium
12cc832a9d arc: cleanup code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 16:04:53 +02:00
AuxXxilium
77cd61685e arc: fix empty syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 15:59:10 +02:00
AuxXxilium
6eaff7eb36 arc: don't reset custom
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 15:58:04 +02:00
AuxXxilium
219948858b arc: reread config after reset
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 15:56:01 +02:00
AuxXxilium
aae3eaba2c arc: force cleanup old files
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 15:47:54 +02:00
AuxXxilium
9e6a45d579 arc: full reset config if model is changed
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-05 15:45:04 +02:00
AuxXxilium
a80655a76b arc-functions: use module name as description for primary nic setting
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-04 17:25:49 +02:00
AuxXxilium
fc45cc84cb arc: rewrite more messages
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-02 11:18:09 +02:00
AuxXxilium
51239adb22 arc: rework some dialog
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-02 11:12:19 +02:00
AuxXxilium
0491b9e9c9 arc: some more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-02 10:54:45 +02:00
AuxXxilium
34c78ce3c3 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-02 10:35:26 +02:00
AuxXxilium
374282b7b5 arc: silence output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 23:46:28 +02:00
AuxXxilium
08c1100be5 tree: more fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 23:40:35 +02:00
AuxXxilium
21bbfb5ff2 functions: silent output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 11:09:01 +02:00
AuxXxilium
7a7d2b2f22 arc-functions: show time/date in sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 09:52:26 +02:00
AuxXxilium
f660cf6131 functions: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 09:50:32 +02:00
AuxXxilium
f5ebbf9704 tree: add ntp timeserver
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 09:45:45 +02:00
AuxXxilium
808c081325 functions: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 09:25:36 +02:00
AuxXxilium
48bd9bd482 tree: fix latest changes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 00:27:40 +02:00
AuxXxilium
5c4b8a8bc5 arc: rewrite build dialog
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 00:25:08 +02:00
AuxXxilium
b6b47184c1 tree: rework some messages
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 00:14:40 +02:00
AuxXxilium
b1338e33b6 tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-06-01 00:00:41 +02:00
AuxXxilium
371859f58d tree: rewrite more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-31 23:25:54 +02:00
AuxXxilium
ea6e6fcb08 tree: fix more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-31 20:49:11 +02:00
AuxXxilium
ab7b9f4bcf arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-31 20:37:17 +02:00
AuxXxilium
5bd85c8b75 arc: use modelid for getting pat/hash
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-31 20:31:55 +02:00
AuxXxilium
73b63dd007 ramdisk: test
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-31 20:14:50 +02:00
AuxXxilium
b25b88a9ae arc: add time/date function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-31 19:50:54 +02:00
AuxXxilium
0de2efedfa tree: rewrite more curl
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-31 19:48:16 +02:00
AuxXxilium
15949d773f tree: only use connected interface for curl
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-31 19:42:50 +02:00
AuxXxilium
cdabe50e0c arc: fix custom
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-30 23:13:54 +02:00
AuxXxilium
53f2568481 tree: more fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-30 22:52:28 +02:00
AuxXxilium
a191f1e2c1 update: fix more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 22:50:14 +02:00
AuxXxilium
3a55ac1e3a update: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 21:37:49 +02:00
AuxXxilium
75d064cc3f update: fix more
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 20:57:24 +02:00
AuxXxilium
5cde4b31e8 arc-functions: fix update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 20:26:21 +02:00
AuxXxilium
92bd4a0e97 tree: more fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 20:25:10 +02:00
AuxXxilium
9171f0fa24 update: rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 20:13:49 +02:00
AuxXxilium
92d687342a update: force reboot if autoupdate fails
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 20:11:15 +02:00
AuxXxilium
78320aae48 arc: fix some messages
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 19:59:57 +02:00
AuxXxilium
5f7a1c266e functions: add some output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 19:49:57 +02:00
AuxXxilium
e34e609fcb functions: more rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 19:42:50 +02:00
AuxXxilium
8daeb9109d functions: add more output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 19:36:08 +02:00
AuxXxilium
938dcd6d79 functions: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 19:34:23 +02:00
AuxXxilium
92f78fa136 tree: syntax fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 19:30:01 +02:00
AuxXxilium
4a994f12c7 arc: remove some messages
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 19:08:48 +02:00
AuxXxilium
16927d976c tree: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 19:03:35 +02:00
AuxXxilium
edb3d3b914 tree: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 18:39:16 +02:00
AuxXxilium
5ac955e180 arc: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 01:53:53 +02:00
AuxXxilium
db1fb53315 arc: chmod +x for extractor
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 01:46:06 +02:00
AuxXxilium
11e2d6963a arc/storage: rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-29 01:43:08 +02:00
AuxXxilium
8dde6a899a arc: rewrite validation logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 23:09:26 +02:00
AuxXxilium
89ef80dfbe arc: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 22:41:00 +02:00
AuxXxilium
e7efdfe7af arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 22:37:54 +02:00
AuxXxilium
6dd8903f56 consts: revert
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 22:33:25 +02:00
AuxXxilium
ed52265c7b arc: add validation check to build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 22:24:19 +02:00
AuxXxilium
ead8c64845 arc: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 21:50:42 +02:00
AuxXxilium
b42ac77a0a arc: rewrite formate function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 21:02:05 +02:00
AuxXxilium
6201d138a7 build: remove extractor
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 20:18:12 +02:00
AuxXxilium
1d5b9b96ba tree: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-27 20:09:27 +02:00
AuxXxilium
47d6ffbbd1 arc: add more sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-26 22:24:15 +02:00
AuxXxilium
ecb7ff0a9e arc/network: rewrite dns setting
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-26 22:04:04 +02:00
AuxXxilium
b987551571 arc: add more sanity check for build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-26 21:52:29 +02:00
AuxXxilium
18b9dd6344 build: remove extractor from build
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-24 10:17:24 +02:00
AuxXxilium
e55c0be066 arc: fix typo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-24 10:14:47 +02:00
AuxXxilium
0886ba597d storage: exclude native from remap port 0
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-24 10:09:37 +02:00
AuxXxilium
838621dc59 init/boot/arc-functions: rewrite some ip functions
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-23 18:20:20 +02:00
AuxXxilium
d51add1678 functions: cleanup code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 20:40:37 +02:00
AuxXxilium
c2beb03142 tree: more fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 20:35:05 +02:00
AuxXxilium
2fc01c19df tree: rewrite filelinks
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 20:08:22 +02:00
AuxXxilium
d50c968a95 tree: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 19:57:48 +02:00
AuxXxilium
185381aff6 tree: cleanup and rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 19:37:04 +02:00
AuxXxilium
93aaf3a7a0 update: fix reboot message
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 19:20:13 +02:00
AuxXxilium
b19060ca06 update: fix output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 19:09:19 +02:00
AuxXxilium
06d2fd2028 update: syntax fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 18:35:06 +02:00
AuxXxilium
94a5d42b75 update: rewrite code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 18:32:25 +02:00
AuxXxilium
b5dedb25f7 update: fix loop
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 18:29:36 +02:00
AuxXxilium
5c3e6c0aec update: full rewrite update function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 17:40:34 +02:00
AuxXxilium
fb128a3670 arc-functions: rewrite full-upgrade
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 15:31:21 +02:00
AuxXxilium
09b774e747 arc: rename hotplug to hotplug/sortdrives
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-22 15:23:26 +02:00
AuxXxilium
d70893a39d arc: fix pat sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-21 22:22:30 +02:00
AuxXxilium
da1cad5b1e arc: rewrite url sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-21 21:07:47 +02:00
AuxXxilium
50cab8772c arc-functions: rework external modules function
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-21 19:05:01 +02:00
AuxXxilium
9f4ffae0bc arc: rewrite automated and add sanity check for url
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-21 18:16:19 +02:00
AuxXxilium
c775348c94 arc: add force rewrite to lower case
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-21 17:53:21 +02:00
AuxXxilium
468214ec1c arc: rewrite arc patch question
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-21 10:19:57 +02:00
AuxXxilium
5af45debaa build: update release notice
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-21 10:06:31 +02:00
AuxXxilium
befc733604 arc-functions: show the version for decryptioncode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-20 21:57:05 +02:00
AuxXxilium
a4180c932b arc-functions: fix output if key is wrong
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-20 21:51:23 +02:00
AuxXxilium
68b50d0976 storage: remove warning from storagemap
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-20 15:48:36 +02:00
AuxXxilium
01dc990d1d arc-functions: fix reboot warning after full-upgrade
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-20 15:11:58 +02:00
AuxXxilium
612c57c398 arc-functions: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-20 14:56:41 +02:00
AuxXxilium
ef2eca888b arc-functions: reread arc_key
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-19 23:26:29 +02:00
AuxXxilium
ecca04e370 arc-functions: remove netbus from sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-19 20:57:58 +02:00
AuxXxilium
1f08170527 arc: set rammin to ram installed
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-19 20:25:46 +02:00
AuxXxilium
7074702d90 init: add upgrade fix for old configs
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-19 17:20:00 +02:00
AuxXxilium
e6e500a808 custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-19 16:28:36 +02:00
AuxXxilium
49e33844f3 arc/network/functions: rework
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-19 12:51:33 +02:00
AuxXxilium
1982fbe303 arc: rewrite message
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 19:31:43 +02:00
AuxXxilium
afabf12c4f tree: some fixes around
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 19:19:24 +02:00
AuxXxilium
d943b622f8 arc: fix offline mode
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 19:19:00 +02:00
AuxXxilium
dfc2455a57 network: sanity check color output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 16:32:24 +02:00
AuxXxilium
948531e59c network: add sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 16:30:16 +02:00
AuxXxilium
cdefd4a21f arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 14:04:35 +02:00
AuxXxilium
961a4c305a arc: modify decryption
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 13:43:33 +02:00
AuxXxilium
8d8b7d9c71 arc: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 12:37:06 +02:00
AuxXxilium
5371a94ce1 tree: cleanup and add decryption
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-18 12:33:37 +02:00
AuxXxilium
3eab707174 build: update custom
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-17 20:58:37 +02:00
AuxXxilium
9ebc67f6a4 arc: ping github silent
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-17 20:54:30 +02:00
AuxXxilium
d4afc257d5 arc: remove forced module loading while boot
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-16 20:49:06 +02:00
AuxXxilium
7b7410bcc1 arc: update logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-16 19:52:04 +02:00
AuxXxilium
32d31a0b6a arc-functions: add more cmdline options to table
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-16 18:51:49 +02:00
AuxXxilium
2bee3621b9 arc: rewrite online check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-16 18:51:25 +02:00
AuxXxilium
73386cd78f modulelist: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-14 16:59:20 +02:00
AuxXxilium
43cd830acd custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-14 16:53:27 +02:00
AuxXxilium
bf946f3fdd tree: remove usbmount from config
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-13 23:17:57 +02:00
AuxXxilium
ecb0657a6c arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 21:16:08 +02:00
AuxXxilium
49ef96ad24 ramdisk: call disks with usbmount
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 20:12:17 +02:00
AuxXxilium
ec875616c0 tree: some style fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 20:11:46 +02:00
AuxXxilium
e60572326e functions: add sanity check
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 16:30:30 +02:00
AuxXxilium
a28a1a80a2 arc: fix syntax
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 16:24:59 +02:00
AuxXxilium
e4b10cd719 arc: only force copy if old dsm files are not found
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 16:23:28 +02:00
AuxXxilium
0dfb6fcfa6 functions: rewrite copyDSMFiles
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 16:17:10 +02:00
AuxXxilium
bc257b20f5 arc-functions: add more options in Portmap section
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 15:39:31 +02:00
AuxXxilium
df566e5d17 arc-functions: rewrite network in sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 15:06:35 +02:00
AuxXxilium
c3e88061d1 arc-functions: fix full sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 14:58:49 +02:00
AuxXxilium
67368b670f init: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 14:54:34 +02:00
AuxXxilium
e02dc20084 arc: fix offline mode logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 14:53:17 +02:00
AuxXxilium
7ac41b5e57 arc: fix logic
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 14:46:01 +02:00
AuxXxilium
bd25dc6704 arc: fix usbmount
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 14:32:27 +02:00
AuxXxilium
210a48cbfd arc-functions: correct sysinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 14:04:41 +02:00
AuxXxilium
fdec4b606d arc: reduce code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 14:01:25 +02:00
AuxXxilium
2b93eb8ff2 arc: add feature to add user to DSM
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 12:35:35 +02:00
AuxXxilium
f7db7cfb27 arc: ui fixes
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-12 12:06:40 +02:00
AuxXxilium
cc9d6fa074 Revert "ramdisk: try to remove faulty patch"
This reverts commit fae50da982.
2024-05-11 21:58:32 +02:00
AuxXxilium
93341702cd boot: fix mac sequence
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 21:29:46 +02:00
AuxXxilium
a7703ff9e3 init: remove empty space
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 21:28:15 +02:00
AuxXxilium
57691cc035 arc: formate dialogs
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 21:26:35 +02:00
AuxXxilium
f16e8d7078 arc: menu (use platform, not model)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 21:21:02 +02:00
AuxXxilium
de18c41bf2 arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 21:19:49 +02:00
AuxXxilium
fae50da982 ramdisk: try to remove faulty patch
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 21:06:42 +02:00
AuxXxilium
a982084f63 arc: more rewrite
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 16:48:45 +02:00
AuxXxilium
39174a0304 arc: fix generated values
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 16:30:30 +02:00
AuxXxilium
7bd80d8e47 functions: fix random serial
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 16:25:53 +02:00
AuxXxilium
0331738af9 arc: fix some styling
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 16:16:25 +02:00
AuxXxilium
3b93527d9b arc: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 15:42:34 +02:00
AuxXxilium
ab40ee4e8e arc: fix links
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 15:02:29 +02:00
AuxXxilium
e72d424103 arc: silent output
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 14:47:30 +02:00
AuxXxilium
7809449e8d arc: cleanup
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 14:28:49 +02:00
AuxXxilium
78c8f6c0fd custom: update
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 14:26:43 +02:00
AuxXxilium
dd985dd069 arc: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 02:00:42 +02:00
AuxXxilium
e7b8c8f25a tree: reformate Part 8 (fix)
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 01:51:22 +02:00
AuxXxilium
ecf2a4fa81 tree: reformate Part 7
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 01:48:15 +02:00
AuxXxilium
ac6c3f8503 arc: reduce code
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 01:09:14 +02:00
AuxXxilium
13a03925cc arc: rewrite model selection exclusion
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 01:06:18 +02:00
AuxXxilium
7d64765ced arc: fix model selection
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-11 01:04:12 +02:00
AuxXxilium
504c4821a8 tree: reformate Part 6
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-10 16:48:42 +02:00
AuxXxilium
8ad6496cfa tree: reformate Part 5
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-10 16:39:13 +02:00
AuxXxilium
df739d364b tree: fix
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-09 22:00:40 +02:00
AuxXxilium
a3c4b480e7 tree: reformate Part 4
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-09 20:39:43 +02:00
AuxXxilium
6711f2a202 build: update to latest
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-09 16:55:14 +02:00
AuxXxilium
9698a8757c tree: reformate part 3
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-09 16:52:47 +02:00
AuxXxilium
828d1c2ad7 tree: reformate part 2
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-09 13:56:59 +02:00
AuxXxilium
8cafe04730 tree: reformate part 1
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-07 22:50:47 +02:00
AuxXxilium
ecd82e1c04 arc: usbpatch remove force
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-07 21:44:15 +02:00
AuxXxilium
c39316ef5e Revert "storage: try something new"
This reverts commit 31293a6fc8.
2024-05-06 22:28:04 +02:00
AuxXxilium
31293a6fc8 storage: try something new
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-06 22:18:43 +02:00
AuxXxilium
38c2f24a87 arc-functions: set new lkm link
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-06 21:05:57 +02:00
AuxXxilium
ad7c736afc build: update custom
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-06 21:05:53 +02:00
AuxXxilium
408959e974 arc: reduce code part 1
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-06 21:05:36 +02:00
AuxXxilium
b55ed1f888 arc-functions: move some config to synoinfo
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-06 17:58:42 +02:00
AuxXxilium
f1c342df85 init: sort things
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-05 13:04:54 +02:00
AuxXxilium
3dcc744dcd init: arc
Signed-off-by: AuxXxilium <info@auxxxilium.tech>
2024-05-05 01:13:00 +02:00
83 changed files with 9703 additions and 3088 deletions

1
.github/FUNDING.yml vendored
View File

@@ -1,3 +1,4 @@
# These are supported funding model platforms
github: AuxXxilium
buy_me_a_coffee: auxxxilium

17
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,17 @@
---
name: Bug report
about: Create a Bug Report
title: ''
labels: bug
assignees: ''
---
**Describe the Bug**
First read Wiki to find a Solution. If you can't find a Solution, provide a clear and concise description of what the bug is.
**Screenshots**
Actual Screenshot from Systeminfo (Config Mode - Sysinfo) or use new "Full Sysinfo - Upload" Function provide the Code!!! <- IMPORTANT
**Hardware**
Add your Hardware Informations here. CPU / Board / Networkcontroller / Storagecontroller / ...

View File

@@ -0,0 +1,8 @@
---
name: Custom Build
about: Create a Customized Build
title: ''
labels: 'custom'
assignees: ''
---

View File

@@ -0,0 +1,14 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
**Is your Feature request related to a Problem? Please describe.**
A clear and concise Description of what the Problem is. Ex. I'm always frustrated when [...]
**Additional Context**
Add any other Context or Screenshots about the Feature request here.

256
.github/workflows/autobuild.yml vendored Normal file
View File

@@ -0,0 +1,256 @@
#
# Copyright (C) 2024 AuxXxilium <https://github.com/AuxXxilium>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
name: Build Arc Image Development
on:
workflow_dispatch:
inputs:
runs:
description: "runs-on"
type: choice
options:
- ubuntu-latest
- self-hosted
version:
description: "version (1.0.0)"
required: true
type: string
next:
description: "next"
default: true
type: boolean
stable:
description: "stable"
default: true
type: boolean
jobs:
build:
runs-on: ${{ inputs.runs }}
steps:
- name: Checkout
uses: actions/checkout@main
# Install Dependencies
- name: Install Dependencies
if: ${{ inputs.runs == 'ubuntu-latest' }}
run: |
git config --global user.email "info@auxxxilium.tech"
git config --global user.name "AuxXxilium"
sudo timedatectl set-timezone "Europe/Berlin"
sudo apt update
sudo apt install -y jq gawk cpio gettext libelf-dev qemu-utils busybox dialog curl sed
sudo snap install yq
df -h
# Get extractor, LKM, Addons, Modules, Theme and Configs
- name: Get Buildroot
run: |
. scripts/func.sh
echo "Get Dependencies"
getAddons "files/p3/addons"
getModules "files/p3/modules"
getConfigs "files/p3/configs"
getPatches "files/p3/patches"
getCustom "files/p3/custom"
getOffline "files/p3/configs"
getLKMs "files/p3/lkms"
getTheme "files/p1/boot/grub"
getBuildrootx "brx"
getBuildroots "brs"
# Export Dependencies Version to env
echo "ADDONTAG=${ADDONTAG}" >> $GITHUB_ENV
echo "MODULETAG=${MODULETAG}" >> $GITHUB_ENV
echo "CONFIGTAG=${CONFIGTAG}" >> $GITHUB_ENV
echo "PATCHTAG=${PATCHTAG}" >> $GITHUB_ENV
echo "CUSTOMTAG=${CUSTOMTAG}" >> $GITHUB_ENV
echo "LKMTAG=${LKMTAG}" >> $GITHUB_ENV
echo "THEMETAG=${THEMETAG}" >> $GITHUB_ENV
echo "BRXTAG=${BRXTAG}" >> $GITHUB_ENV
echo "BRSTAG=${BRSTAG}" >> $GITHUB_ENV
echo "BUILD_TIME=$(date +'%Y-%m-%d %H:%M')" >> $GITHUB_ENV
echo "OK"
# Build incremental
- name: Build Next Image
if: ${{ inputs.next == true }}
run: |
. scripts/func.sh
# Modify Source File
ARC_BUILD="`date +'%y%m%d'`"
ARC_VERSION="${{ inputs.version }}-dev"
ARC_BRANCH="next"
echo "${ARC_BUILD}" >files/p1/ARC-BUILD
echo "${ARC_VERSION}" >files/p1/ARC-VERSION
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH
echo "ARC_BUILD=${ARC_BUILD}" >> $GITHUB_ENV
echo "ARC_VERSION=${ARC_VERSION}" >> $GITHUB_ENV
echo "ARC_BRANCH=${ARC_BRANCH}" >> $GITHUB_ENV
echo "Create Arc Image"
IMAGE_FILE="arc.img"
gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
echo "Mounting Image File"
mkdir -p "/tmp/p1"
mkdir -p "/tmp/p3"
sudo mount ${LOOPX}p1 "/tmp/p1"
sudo mount ${LOOPX}p3 "/tmp/p3"
[ ! -f "brx/bzImage-arc" ] || [ ! -f "brx/initrd-arc" ] && return 1
echo "Repack initrd"
cp -f "brx/bzImage-arc" "files/p3/bzImage-arc"
#cp -f "brx/initrd-arc" "files/p3/initrd-arc"
repackInitrd "brx/initrd-arc" "files/initrd" "files/p3/initrd-arc"
echo "Copying files"
sudo cp -rf "files/p1/"* "/tmp/p1"
sudo cp -rf "files/p3/"* "/tmp/p3"
sudo sync
echo "Unmount image file"
sudo umount "/tmp/p1"
sudo umount "/tmp/p3"
rmdir "/tmp/p1"
rmdir "/tmp/p3"
sudo losetup --detach ${LOOPX}
echo "Image Converter"
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic arc-dyn.vmdk
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat arc.vmdk
qemu-img convert ${IMAGE_FILE} -O vhdx -o subformat=dynamic arc.vhdx
# Zip image and generate checksum
- name: Pack Next Image
if: ${{ inputs.next == true }}
run: |
if [ -n "${{ env.ARC_VERSION }}" ]; then
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhdx.zip" arc.vhdx
(cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3)
fi
# Cleanup
- name: Cleanup
run: |
rm -rf "arc.img" "arc.vmdk" "arc-dyn.vmdk" "arc.vhdx" "arc-flat.vmdk"
# Build incremental
- name: Build Stable Image
if: ${{ inputs.stable }}
run: |
. scripts/func.sh
# Modify Source File
ARC_BUILD="`date +'%y%m%d'`"
ARC_VERSION="${{ inputs.version }}-dev"
ARC_BRANCH="stable"
echo "${ARC_BUILD}" >files/p1/ARC-BUILD
echo "${ARC_VERSION}" >files/p1/ARC-VERSION
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH
echo "ARC_BUILD=${ARC_BUILD}" >> $GITHUB_ENV
echo "ARC_VERSION=${ARC_VERSION}" >> $GITHUB_ENV
echo "ARC_BRANCH=${ARC_BRANCH}" >> $GITHUB_ENV
echo "Create Arc Image"
IMAGE_FILE="arc.img"
gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
echo "Mounting Image File"
mkdir -p "/tmp/p1"
mkdir -p "/tmp/p3"
sudo mount ${LOOPX}p1 "/tmp/p1"
sudo mount ${LOOPX}p3 "/tmp/p3"
[ ! -f "brs/bzImage-arc" ] || [ ! -f "brs/initrd-arc" ] && return 1
echo "Repack initrd"
cp -f "brs/bzImage-arc" "files/p3/bzImage-arc"
#cp -f "brs/initrd-arc" "files/p3/initrd-arc"
repackInitrd "brs/initrd-arc" "files/initrd" "files/p3/initrd-arc"
echo "Copying files"
sudo cp -rf "files/p1/"* "/tmp/p1"
sudo cp -rf "files/p3/"* "/tmp/p3"
sudo sync
echo "Unmount image file"
sudo umount "/tmp/p1"
sudo umount "/tmp/p3"
rmdir "/tmp/p1"
rmdir "/tmp/p3"
sudo losetup --detach ${LOOPX}
echo "Image Converter"
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic arc-dyn.vmdk
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat arc.vmdk
qemu-img convert ${IMAGE_FILE} -O vhdx -o subformat=dynamic arc.vhdx
# Zip image and generate checksum
- name: Pack Stable Image
if: ${{ inputs.stable }}
run: |
if [ -n "${{ env.ARC_VERSION }}" ]; then
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhdx.zip" arc.vhdx
(cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3)
fi
# Publish a release if is a tag
- name: Release
if: success() && env.ARC_VERSION != ''
uses: ncipollo/release-action@v1
with:
tag: ${{ env.ARC_VERSION }}
prerelease: true
makeLatest: false
allowUpdates: true
body: |
### Note:
- Development Build
### Information:
- Full Changelog is available in my Discord
- Discord Account for Arc Patch needed
### Dependencies:
- Addons: ${{ env.ADDONTAG }}
- Modules: ${{ env.MODULETAG }}
- Configs: ${{ env.CONFIGTAG }}
- Patches: ${{ env.PATCHTAG }}
- Custom: ${{ env.CUSTOMTAG }}
- LKMs: ${{ env.LKMTAG }}
- Buildroot Stable: ${{ env.BRSTAG }}
- Buildroot Next: ${{ env.BRXTAG }}
### Release
- ${{ env.BUILD_TIME }}
artifacts: |
arc-*.zip
update-*.zip

294
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,294 @@
#
# Copyright (C) 2024 AuxXxilium <https://github.com/AuxXxilium>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
name: Build Arc Image
on:
workflow_dispatch:
inputs:
runs:
description: "runs-on"
type: choice
options:
- ubuntu-latest
- self-hosted
version:
description: "version (1.0.0)"
required: true
type: string
notice:
description: "Notice here"
required: false
type: string
latest:
description: "latest"
default: true
type: boolean
prerelease:
description: "pre release"
default: false
type: boolean
next:
description: "next"
default: true
type: boolean
stable:
description: "stable"
default: true
type: boolean
clean:
description: "clean"
default: false
type: boolean
jobs:
build:
runs-on: ${{ inputs.runs }}
steps:
- name: Checkout
uses: actions/checkout@main
- name: Delete releases and workflows runs
if: ${{ inputs.clean == true }}
uses: ophub/delete-releases-workflows@main
with:
delete_releases: true
releases_keep_latest: 1
delete_workflows: false
delete_tags: true
gh_token: ${{ secrets.GITHUB_TOKEN }}
# Install Dependencies
- name: Install Dependencies
if: ${{ inputs.runs == 'ubuntu-latest' }}
run: |
git config --global user.email "info@auxxxilium.tech"
git config --global user.name "AuxXxilium"
sudo timedatectl set-timezone "Europe/Berlin"
sudo apt update
sudo apt install -y jq gawk cpio gettext libelf-dev qemu-utils busybox dialog curl sed
sudo snap install yq
df -h
# Get extractor, LKM, Addons, Modules, Theme and Configs
- name: Get Dependencies for all Image
run: |
. scripts/func.sh
echo "Get Dependencies"
getAddons "files/p3/addons"
getModules "files/p3/modules"
getConfigs "files/p3/configs"
getPatches "files/p3/patches"
getCustom "files/p3/custom"
getOffline "files/p3/configs"
getLKMs "files/p3/lkms"
getTheme "files/p1/boot/grub"
getBuildrootx "brx"
getBuildroots "brs"
# Export Dependencies Version to env
echo "ADDONTAG=${ADDONTAG}" >> $GITHUB_ENV
echo "MODULETAG=${MODULETAG}" >> $GITHUB_ENV
echo "CONFIGTAG=${CONFIGTAG}" >> $GITHUB_ENV
echo "PATCHTAG=${PATCHTAG}" >> $GITHUB_ENV
echo "CUSTOMTAG=${CUSTOMTAG}" >> $GITHUB_ENV
echo "LKMTAG=${LKMTAG}" >> $GITHUB_ENV
echo "THEMETAG=${THEMETAG}" >> $GITHUB_ENV
echo "BRXTAG=${BRXTAG}" >> $GITHUB_ENV
echo "BRSTAG=${BRSTAG}" >> $GITHUB_ENV
echo "BUILD_TIME=$(date +'%Y-%m-%d %H:%M')" >> $GITHUB_ENV
echo "OK"
# Build incremental
- name: Build Next Image
if: ${{ inputs.next == true }}
run: |
. scripts/func.sh
# Modify Source File
ARC_BUILD="`date +'%y%m%d'`"
ARC_VERSION="${{ inputs.version }}"
ARC_BRANCH="next"
echo "${ARC_BUILD}" >files/p1/ARC-BUILD
echo "${ARC_VERSION}" >files/p1/ARC-VERSION
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH
echo "ARC_BUILD=${ARC_BUILD}" >> $GITHUB_ENV
echo "ARC_VERSION=${ARC_VERSION}" >> $GITHUB_ENV
echo "ARC_BRANCH=${ARC_BRANCH}" >> $GITHUB_ENV
echo "Create Arc Image"
IMAGE_FILE="arc.img"
gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
echo "Mounting Image File"
mkdir -p "/tmp/p1"
mkdir -p "/tmp/p3"
sudo mount ${LOOPX}p1 "/tmp/p1"
sudo mount ${LOOPX}p3 "/tmp/p3"
[ ! -f "brx/bzImage-arc" ] || [ ! -f "brx/initrd-arc" ] && return 1
echo "Repack initrd"
cp -f "brx/bzImage-arc" "files/p3/bzImage-arc"
#cp -f "brx/initrd-arc" "files/p3/initrd-arc"
repackInitrd "brx/initrd-arc" "files/initrd" "files/p3/initrd-arc"
echo "Copying files"
sudo cp -rf "files/p1/"* "/tmp/p1"
sudo cp -rf "files/p3/"* "/tmp/p3"
sudo sync
echo "Unmount image file"
sudo umount "/tmp/p1"
sudo umount "/tmp/p3"
rmdir "/tmp/p1"
rmdir "/tmp/p3"
sudo losetup --detach ${LOOPX}
echo "Image Converter"
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic arc-dyn.vmdk
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat arc.vmdk
qemu-img convert ${IMAGE_FILE} -O vhdx -o subformat=dynamic arc.vhdx
echo "Create Arc ova"
convertova "${IMAGE_FILE}" "arc.ova"
# Zip image and generate checksum
- name: Pack Next Image
if: ${{ inputs.next == true }}
run: |
if [ -n "${{ env.ARC_VERSION }}" ]; then
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhdx.zip" arc.vhdx
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.ova.zip" arc.ova
(cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3)
fi
# Cleanup
- name: Cleanup
run: |
rm -rf "arc.img" "arc.ova" "arc.vmdk" "arc-dyn.vmdk" "arc.vhdx" "arc-flat.vmdk"
# Build incremental
- name: Build Stable Image
if: ${{ inputs.stable == true }}
run: |
. scripts/func.sh
# Modify Source File
ARC_BUILD="`date +'%y%m%d'`"
ARC_VERSION="${{ inputs.version }}"
ARC_BRANCH="stable"
echo "${ARC_BUILD}" >files/p1/ARC-BUILD
echo "${ARC_VERSION}" >files/p1/ARC-VERSION
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH
echo "ARC_BUILD=${ARC_BUILD}" >> $GITHUB_ENV
echo "ARC_VERSION=${ARC_VERSION}" >> $GITHUB_ENV
echo "ARC_BRANCH=${ARC_BRANCH}" >> $GITHUB_ENV
echo "Create Arc Image"
IMAGE_FILE="arc.img"
gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
echo "Mounting Image File"
mkdir -p "/tmp/p1"
mkdir -p "/tmp/p3"
sudo mount ${LOOPX}p1 "/tmp/p1"
sudo mount ${LOOPX}p3 "/tmp/p3"
[ ! -f "brs/bzImage-arc" ] || [ ! -f "brs/initrd-arc" ] && return 1
echo "Repack initrd"
cp -f "brs/bzImage-arc" "files/p3/bzImage-arc"
#cp -f "brs/initrd-arc" "files/p3/initrd-arc"
repackInitrd "brs/initrd-arc" "files/initrd" "files/p3/initrd-arc"
echo "Copying files"
sudo cp -rf "files/p1/"* "/tmp/p1"
sudo cp -rf "files/p3/"* "/tmp/p3"
sudo sync
echo "Unmount image file"
sudo umount "/tmp/p1"
sudo umount "/tmp/p3"
rmdir "/tmp/p1"
rmdir "/tmp/p3"
sudo losetup --detach ${LOOPX}
echo "Image Converter"
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic arc-dyn.vmdk
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat arc.vmdk
qemu-img convert ${IMAGE_FILE} -O vhdx -o subformat=dynamic arc.vhdx
echo "Create Arc ova"
convertova "${IMAGE_FILE}" "arc.ova"
# Zip image and generate checksum
- name: Pack Stable Image
if: ${{ inputs.stable == true }}
run: |
if [ -n "${{ env.ARC_VERSION }}" ]; then
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhdx.zip" arc.vhdx
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.ova.zip" arc.ova
(cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3)
fi
# Publish a release if is a tag
- name: Release
if: success() && env.ARC_VERSION != ''
uses: ncipollo/release-action@v1
with:
tag: ${{ env.ARC_VERSION }}
prerelease: ${{ inputs.prerelease }}
makeLatest: ${{ inputs.latest }}
allowUpdates: true
body: |
### Note:
- ${{ inputs.notice }}
### Information:
- Full Changelog is available in my Discord
- Discord Account for Arc Patch needed
### Versions:
- stable: Stable Image (Full Image, all dependencies are included, less hardware support)
- next: Next Image (Full Image, all dependencies are included, more hardware support, new features to test)
### Dependencies:
- Addons: ${{ env.ADDONTAG }}
- Modules: ${{ env.MODULETAG }}
- Configs: ${{ env.CONFIGTAG }}
- Patches: ${{ env.PATCHTAG }}
- Custom: ${{ env.CUSTOMTAG }}
- LKMs: ${{ env.LKMTAG }}
- Buildroot Stable: ${{ env.BRSTAG }}
- Buildroot Next: ${{ env.BRXTAG }}
### Release
- ${{ env.BUILD_TIME }}
artifacts: |
arc-*.zip
update-*.zip

318
.github/workflows/custom.yml vendored Normal file
View File

@@ -0,0 +1,318 @@
#
# Copyright (C) 2023 AuxXxilium <https://github.com/AuxXxilium>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
name: Custom Build
on:
issues:
types:
- labeled
jobs:
build:
if: github.event.label.name == 'custom'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
- name: Init Env
run: |
git config --global user.email "info@auxxxilium.tech"
git config --global user.name "AuxXxilium"
sudo timedatectl set-timezone "Europe/Berlin"
- name: Check Custom
shell: python
run: |
# -*- coding: utf-8 -*-
import json, subprocess
def set_output(name, value):
subprocess.call(["echo '{}={}' >> $GITHUB_ENV".format(name, value)], shell=True)
issuetitle = ${{ toJSON(github.event.issue.title) }};
issuebody = ${{ toJSON(github.event.issue.body) }};
MODEL = ''
PRODUCTVER = ''
ADDONS = ''
KERNEL = ''
FORMAT = ''
BRANCH = ''
try:
jsonbody = json.loads(issuebody)
MODEL = jsonbody.get('model', '')
PRODUCTVER = jsonbody.get('version', '')
ADDONS = jsonbody.get('addons', '')
KERNEL = jsonbody.get('kernel', '')
FORMAT = jsonbody.get('format', '')
BRANCH = jsonbody.get('branch', '')
except ValueError as e:
pass
set_output("MODEL", MODEL)
set_output("PRODUCTVER", PRODUCTVER)
set_output("ADDONS", ADDONS)
set_output("KERNEL", KERNEL)
set_output("FORMAT", FORMAT)
set_output("BRANCH", BRANCH)
# calculates the version number and push
- name: Calculate Version
run: |
# Calculate Version
VERSION="`date +'%y.%-m.%-d'`-custom"
echo "Version: ${VERSION}"
echo "VERSION=${VERSION}" >> $GITHUB_ENV
- name: Update Comment Building
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 }}.
building arc-${{ env.MODEL }}-${{ env.VERSION }}, it will be uploaded here and sent to your email later..
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
----
# Install dependencies
- name: Install Dependencies
run: |
sudo apt update
sudo apt install -y jq gawk cpio gettext libelf-dev qemu-utils busybox dialog curl sed
sudo pip install -r scripts/requirements.txt
sudo snap install yq
# Build incremental
- name: Build image
run: |
. scripts/func.sh
function writeConfigKey() {
[ "${2}" = "{}" ] && sudo yq eval '.'${1}' = {}' --inplace "${3}" 2>/dev/null || sudo yq eval '.'${1}' = "'"${2}"'"' --inplace "${3}" 2>/dev/null
}
TAG="$(curl -m 5 -kL https://api.github.com/repos/AuxXxilium/arc/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')"
curl -kL "https://github.com/AuxXxilium/arc/releases/download/${TAG}/arc-${TAG}-${{ env.BRANCH }}.img.zip" -o "/tmp/arc.img.zip"
unzip -o "/tmp/arc.img.zip" -d "/tmp"
echo "Modify Arc Image"
IMAGE_FILE="/tmp/arc.img"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
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 "Set Custom Config"
PRESET_CONFIG_FILE="/tmp/p1/user-config.yml"
sudo touch "${PRESET_CONFIG_FILE}"
MODEL="${{ env.MODEL }}"
writeConfigKey "model" "${MODEL}" "${PRESET_CONFIG_FILE}"
PRODUCTVER="${{ env.PRODUCTVER }}"
PJ="$(python scripts/functions.py getpats4mv -m "${MODEL}" -v "${PRODUCTVER:0:3}")"
PAT_URL=$(echo "${PJ}" | jq -r ".\"${PRODUCTVER}\".url")
PAT_HASH=$(echo "${PJ}" | jq -r ".\"${PRODUCTVER}\".sum")
writeConfigKey "productver" "${PRODUCTVER:0:3}" "${PRESET_CONFIG_FILE}"
writeConfigKey "paturl" "${PAT_URL}" "${PRESET_CONFIG_FILE}"
writeConfigKey "pathash" "${PAT_HASH}" "${PRESET_CONFIG_FILE}"
if [ "${{ env.MODEL }}" = "SA6400" ]; then
writeConfigKey "kernel" "${{ env.KERNEL }}" "${PRESET_CONFIG_FILE}"
fi
writeConfigKey "addons" "{}" "${PRESET_CONFIG_FILE}"
if [ -n "${{ env.ADDONS }}" ]; then
for A in $(echo "${{ env.ADDONS }}" | tr ',' ' ' | sed 's/\[//g' | sed 's/\]//g'); do
VALUE=""
writeConfigKey "addons.\"${A}\"" "${VALUE}" "${PRESET_CONFIG_FILE}"
done
fi
writeConfigKey "automated" "true" "${PRESET_CONFIG_FILE}"
echo "$(cat "${PRESET_CONFIG_FILE}")"
sudo echo "arc-${MODEL}-${PRODUCTVER:0:3}-${TAG}" >"/tmp/automated"
sudo mv -f "/tmp/automated" "/tmp/p3/automated"
DSM_FILE="${PAT_HASH}.tar"
DSM_URL="https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/files/${MODEL/+/%2B}/${PRODUCTVER:0:3}/${PAT_HASH}.tar"
sudo curl -skL "${DSM_URL}" -o "/tmp/${DSM_FILE}"
[ -f "/tmp/${DSM_FILE}" ] && echo "dsm: download successful" || exit 1
sudo mkdir -p "/tmp/p3/users"
sudo mv -f "/tmp/${DSM_FILE}" "/tmp/p3/users/${DSM_FILE}"
echo "Syncing files"
sync
echo "Unmount image file"
sudo umount "/tmp/p1"
sudo umount "/tmp/p3"
rmdir "/tmp/p1"
rmdir "/tmp/p3"
sudo losetup --detach ${LOOPX}
cp -f "${IMAGE_FILE}" "arc.img"
if [ "${{ env.FORMAT }}" = "dyn" ]; then
echo "Image Converter -> dyn"
qemu-img convert arc.img -O vmdk -o adapter_type=lsilogic,compat6 arc-dyn.vmdk
elif [ "${{ env.FORMAT }}" = "flat" ]; then
echo "Image Converter -> flat"
qemu-img convert arc.img -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat,compat6 arc.vmdk
elif [ "${{ env.FORMAT }}" = "vhdx" ]; then
echo "Image Converter -> vhdx"
qemu-img convert arc.img -O vhdx -o subformat=dynamic arc.vhdx
elif [ "${{ env.FORMAT }}" = "ova" ]; then
echo "Image Converter -> ova"
convertova "arc.img" "arc.ova"
fi
# Zip image and generate checksum
- name: Pack
run: |
if [ "${{ env.FORMAT }}" = "img" ]; then
zip -9 "arc-${{ env.MODEL }}-${{ env.VERSION }}.img.zip" arc.img
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.VERSION }}.img.zip" "https://file.io")"
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then
echo "Upload failed"
exit 1
fi
elif [ "${{ env.FORMAT }}" = "dyn" ]; then
zip -9 "arc-${{ env.MODEL }}-${{ env.VERSION }}.vmdk-dyn.zip" arc-dyn.vmdk
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.VERSION }}.vmdk-dyn.zip" "https://file.io")"
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then
echo "Upload failed"
exit 1
fi
elif [ "${{ env.FORMAT }}" = "flat" ]; then
zip -9 "arc-${{ env.MODEL }}-${{ env.VERSION }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.VERSION }}.vmdk-flat.zip" "https://file.io")"
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then
echo "Upload failed"
exit 1
fi
elif [ "${{ env.FORMAT }}" = "vhdx" ]; then
zip -9 "arc-${{ env.MODEL }}-${{ env.VERSION }}.vhdx.zip" arc.vhdx
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.VERSION }}.vhdx.zip" "https://file.io")"
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then
echo "Upload failed"
exit 1
fi
elif [ "${{ env.FORMAT }}" = "ova" ]; then
zip -9 "arc-${{ env.MODEL }}-${{ env.VERSION }}.ova.zip" arc.ova
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.VERSION }}.ova.zip" "https://file.io")"
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then
echo "Upload failed"
exit 1
fi
fi
EMAIL=$(curl -s -H "Authorization: token ${{ secrets.ACTION }}" "https://api.github.com/users/${{ github.event.issue.user.login }}" | jq -r '.email')
FIOURL="$(echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+')"
echo "EMAIL=${EMAIL}" >> $GITHUB_ENV
echo "FIOURL=${FIOURL}" >> $GITHUB_ENV
- name: Send mail
if: success() && env.EMAIL != 'null'
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 587
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
subject: arc-${{ env.model }}-${{ env.VERSION }}
to: ${{ env.EMAIL }}
from: ${{ secrets.MAIL_USERNAME }}
body: |
${{ env.FIOURL }}
- name: Update Comment Success
if: 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 }}.
arc-${{ env.MODEL }}-${{ env.VERSION }} is ready to download: ${{ env.FIOURL }}
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
If this will not work, do not use customized Versions!
----
- name: Update Comment Fail
if: 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 }}.
arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }} failed to build and package, please try again.
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
If this will not work, do not use customized Versions!
----
- name: Close Issues
if: success()
uses: actions-cool/issues-helper@v3
with:
actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
comment:
if: github.event.label.name == 'bug'
runs-on: ubuntu-latest
steps:
- name: Init Env
run: |
git config --global user.email "info@auxxxilium.tech"
git config --global user.name "AuxXxilium"
sudo timedatectl set-timezone "Europe/Berlin"
- name: Check Issues
run: |
if echo "${{ github.event.issue.body }}" | grep -q "Screenshots"; then
echo "FALG=true" >> $GITHUB_ENV
else
echo "FALG=false" >> $GITHUB_ENV
fi
- name: Create Issues comment
if: env.FALG == 'false'
uses: actions-cool/issues-helper@v3
with:
actions: "create-comment"
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
**Describe the Bug**
A clear and concise description of what the bug is.
**Screenshots**
Screenshot the Systeminfo (Arc - Sysinfo) or use new "Full Sysinfo - Upload" Function provide the Code!!! <- IMPORTANT
**Hardware**
Add your Hardware Informations here. CPU / Board / Networkcontroller / Storagecontroller / ...
- name: Close Issues
if: env.FALG == 'false'
uses: actions-cool/issues-helper@v3
with:
actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}

View File

@@ -34,16 +34,11 @@ jobs:
sudo timedatectl set-timezone "Europe/Berlin"
sudo apt update
sudo apt install -y build-essential libtool pkgconf libzstd-dev liblzma-dev libssl-dev busybox dialog curl xz-utils cpio sed qemu-utils
sudo apt install -y build-essential libtool pkgconf libzstd-dev liblzma-dev libssl-dev # kmodule dependencies
YQ=$(command -v yq)
if [ -z "${YQ}" ] || ! ${YQ} --version 2>/dev/null | grep -q "v4."; then
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O "${YQ:-"/usr/bin/yq"}" && chmod +x "${YQ:-"/usr/bin/yq"}"
fi
- name: Get Addon Data for Arc
- name: Get Release Data for Arc
run: |
REPO="https://github.com/AuxXxilium/arc-addons"
REPO="${{ github.server_url }}/${{ github.repository }}"
PRERELEASE="true"
TAG=""
@@ -54,46 +49,28 @@ jobs:
TAG="${LATESTURL##*/}"
fi
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
rm -f addons.zip
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/addons-${TAG}.zip" -o "addons.zip")
rm -f arc-${TAG}.img.zip
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/arc-${TAG}.img.zip" -o "arc-${TAG}.img.zip")
if [ $? -ne 0 -o ${STATUS:-0} -ne 200 ]; then
echo "Download failed"
exit 1
fi
mkdir -p "mnt/p3/addons"
unzip addons.zip -d "mnt/p3/addons"
for i in $(find "mnt/p3/addons" -type f -name "*.addon"); do
if [ -f "${i}" ]; then
mkdir -p "mnt/p3/addons/$(basename "${i}" .addon)"
tar -xaf "${i}" -C "mnt/p3/addons/$(basename "${i}" .addon)"
fi
done
rm -f addons.zip
unzip arc-${TAG}.img.zip -d "arc"
- name: Get Config Data for Arc
run: |
REPO="https://github.com/AuxXxilium/arc-configs"
LATESTURL="$(curl -skL --connect-timeout 10 -w %{url_effective} -o /dev/null "${REPO}/releases/latest")"
TAG="${LATESTURL##*/}"
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
rm -f configs.zip
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/configs-${TAG}.zip" -o "configs.zip")
if [ $? -ne 0 -o ${STATUS:-0} -ne 200 ]; then
echo "Download failed"
sudo ./localbuild.sh create arc/ws arc/arc.img
if [ $? -ne 0 ]; then
echo "create failed"
exit 1
fi
mkdir -p "mnt/p3/configs"
unzip configs.zip -d "mnt/p3/configs"
rm -f configs.zip
- name: Get data
run: |
pip install -r scripts/requirements.txt
python scripts/functions.py getmodels -w "." -j "docs/models.json"
python scripts/functions.py getaddons -w "." -j "docs/addons.json"
python scripts/functions.py getpats -w "." -j "docs/pats.json"
python scripts/func.py getmodels -w "arc/ws" -j "docs/models.json"
python scripts/func.py getaddons -w "arc/ws" -j "docs/addons.json"
python scripts/func.py getmodules -w "arc/ws" -j "docs/modules.json"
python scripts/func.py getpats -w "arc/ws" -j "docs/pats.json"
- name: Upload to Artifacts
if: success()

55
.github/workflows/grub.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
#
# Copyright (C) 2023 AuxXxilium <https://github.com/AuxXxilium>
#
# 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 "info@auxxxilium.tech"
git config --global user.name "AuxXxilium"
sudo timedatectl set-timezone "Europe/Berlin"
sudo apt update
sudo apt install -y autoconf automake autopoint gettext build-essential bison flex libtool dosfstools e2fsprogs
sudo apt install -y libfreetype6-dev unifont fonts-dejavu libfuse-dev liblzma-dev libzfslinux-dev
- name: Make Grub
run: |
. scripts/grub.sh "grub-2.12" "i386-pc i386-efi x86_64-efi"
- 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/initrd/opt/arc/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 "grub: update $(date +%Y-%m-%d" "%H:%M:%S)"
git push -f
fi
else
echo "No change ..."
fi

View File

@@ -1,6 +1,6 @@
<center><img width="845" alt="arc_loader" src="https://github.com/AuxXxilium/AuxXxilium/assets/67025065/ef975a36-9f3e-4cfb-813c-402db69611e7"></center>
Arc is a customized Redpill Loader for DSM 7.x (Xpenology) with enhanced Hardwaresupport, Addons, Extensions, guided(semi-automated) Installation and more. Multiple customization options are built-in. It is modified to run on different Hardware (see Wiki for more Informations).
The Arc Loader is a customized Redpill Loader for DSM 7.x (Xpenology) with enhanced Hardwaresupport, Addons, guided(semi-automated) Installation and more. Multiple customization options are built-in. It is modified to run on different Hardware (see Wiki for more Informations).
- Commercial use is not permitted and strictly forbidden!!!
- DSM and all Parts are under Copyright / Ownership or Registered Trademark by Synology Inc.
@@ -17,7 +17,11 @@ Arc is a customized Redpill Loader for DSM 7.x (Xpenology) with enhanced Hardwar
- <a href="https://github.com/AuxXxilium">Overview</a>
- <a href="https://auxxxilium.tech/wiki">FAQ & Wiki</a>
- <a href="https://github.com/AuxXxilium/arc/releases?q=prerelease%3Afalse&expanded=true">Download latest Build</a>
- <a href="https://auxxxilium.github.io/arc">Customized Build with automated Config</a>
### Developer
- <a href="https://github.com/AuxXxilium">AuxXxilium</a>
- <a href="https://github.com/FulcrumCode">Fulcrum</a>
### Thanks
For code and ideas based on the work of TTG, pocopico, jumkey, fbelavenuto, wjz304 and others involved in continuing TTG's original redpill-load project.
Code is based on the work of TTG, pocopico, jumkey, fbelavenuto, wjz304 and others involved in continuing TTG's original redpill-load project.

20
Taskfile.yaml Normal file
View File

@@ -0,0 +1,20 @@
# https://taskfile.dev
version: "3"
tasks:
build-img-n:
cmds:
- git pull
- ./img-gen-n.sh
build-img-s:
cmds:
- git pull
- ./img-gen-s.sh
compile-kpatch:
dir: kpatch
cmds:
- make clean all
- mv kpatch ../files/p3/system/

View File

@@ -1,178 +0,0 @@
{
"acpid": {
"system": false,
"description": "Daemon for delivering ACPI events (Powerbutton, etc.)"
},
"addincards": {
"system": false,
"description": "Remove the Modelrestrictions for official Addin Cards"
},
"allowdowngrade": {
"system": false,
"description": "Allow Downgrade for AME, MediaServer, SynoPhotos, SS and VideoStation on DSM 7.2.2"
},
"amepatch": {
"system": false,
"description": "Dynamic Licensepatch for AME - Force download HEVC Codec (Don't use with codecpatch)"
},
"arcdns": {
"system": false,
"description": "Dynamic DNS client for arcdns.tech - Modify in DSM DynDNS Settings"
},
"beep": {
"system": false,
"description": "Beep at startup and shutdown (requires motherboard with buzzer)"
},
"bootwait": {
"system": false,
"description": "Boot process waits until boot device (`/dev/synoboot`) and PCIe Device are available"
},
"codecpatch": {
"system": false,
"description": "Enables transcoding for DSM - Force download AAC + HEVC Codec (Don't use with amepatch)"
},
"cpufreqscaling": {
"system": false,
"description": "Enable CPU Freqscaling for DSM - Modify in Arc DSM Options"
},
"cpuinfo": {
"system": false,
"description": "Add real CPU Information to DSM System"
},
"dbgutils": {
"system": false,
"description": "Binaries to facilitate debug in the junior mode"
},
"deduplication": {
"system": false,
"description": "Force enable Deduplication (Only for SSD)"
},
"disks": {
"system": true,
"description": "Config disks related setting"
},
"dsmconfigbackup": {
"system": false,
"description": "Automatically backup Systemconfig Settings to the Bootloader Disk(/mnt/p1/dsmbackup) at Shutdown"
},
"eudev": {
"system": true,
"description": "eudev + kmod will assist with auto module loading"
},
"expands": {
"system": false,
"description": "Expanded miscellaneous, updated usb.map, ca-certificates.crt and more"
},
"hdddb": {
"system": false,
"description": "Add Disks to DSM compatibility DiskDB and bypass Memory Limitation"
},
"i915": {
"system": false,
"description": "Automatically replace the device ID of i915 module. (Intel 2nd - 9th Gen)"
},
"ledcontrol": {
"system": false,
"description": "Add Ugreen Ledcontrol to DSM (Need sensors Addon)"
},
"localrss": {
"system": true,
"description": "rss for bootloader pat"
},
"lsiutil": {
"system": false,
"description": "A tool for working with some LSI RAID controllers"
},
"misc": {
"system": true,
"description": "Miscellaneous functions"
},
"mountloader": {
"system": true,
"description": "Add a script to mount/unmount loader disk in the DSM scheduled task"
},
"notify": {
"system": true,
"description": "Add Arc Notification System"
},
"nvmecache": {
"system": false,
"description": "Enable M.2 as Cache (for DS918+ RS1619xs+ DS1019+ DS1621xs+)"
},
"nvmesystem": {
"system": false,
"description": "Enable DSM installation to NVMe M.2 SSDs. (Only use if you have only NVMe M.2 SSDs installed)"
},
"nvmevolume": {
"system": false,
"description": "Enable M.2 as Volume (for non supported Models)"
},
"optional": {
"system": false,
"description": "Disable some DSM logs and help with Disk hibernation"
},
"photosfacepatch": {
"system": false,
"description": "Face Detection Patch for Syno Photos (Best with iGPU)"
},
"powersched": {
"system": false,
"description": "Utility to configure RTC according to DSM power schedule (If supported)"
},
"reboottoloader": {
"system": false,
"description": "Add ability to reboot to Loader from Inside DSM"
},
"redpill": {
"system": true,
"description": "Delay redpill for epyc7002"
},
"remotefs": {
"system": false,
"description": "Allow remote NFS/CIFS shared folder be used in VideoStation, AudioStation and PhotoStation"
},
"revert": {
"system": true,
"description": "Revert all Modifications"
},
"sensors": {
"system": false,
"description": "Install sensors package to monitor temperature of CPU and other components"
},
"sequentialio": {
"system": false,
"description": "Enables sequential I/O for SSD caches (Can cause overheating) - Modify in Arc DSM Options"
},
"setrootpw": {
"system": false,
"description": "Set root password and enable ssh/sftp. Please modify PW=\"\" to the desired password in DSM Task Scheduler and run the task"
},
"smartctl": {
"system": false,
"description": "Fix SMART information for HBA devices. @Phachd"
},
"sortnetif": {
"system": false,
"description": "Sort network interface names: sorted by busid"
},
"sspatch": {
"system": false,
"description": "Dynamic License Patch for SS 9.2.x (Not for DVA 3219)"
},
"storagepanel": {
"system": false,
"description": "Automated Storagepanel selection - Modify in Arc DSM Options"
},
"updatenotify": {
"system": false,
"description": "Arc Loader Update Notifications in DSM"
},
"ups": {
"system": false,
"description": "Force UPS to shut down in Standby mode"
},
"wol": {
"system": true,
"description": "Force enable the Wake-on-lan on all nic"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -1,360 +0,0 @@
<!DOCTYPE html>
<html lang="en-US" 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%;
}
a {
color: #ff0000;
text-decoration: none;
}
.State--merged {
background-color: #ff0000;
}
.btn-primary {
background-color: #333333;
}
.btn-primary:disabled {
background-color: #111111;
}
.btn:disabled {
background-color: #111111;
}
</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://fastly.jsdelivr.net/npm/marked/marked.min.js"></script> -->
<script type="application/javascript">
var repo = "AuxXxilium/arc"
var _models = {};
var _addons = {};
var _pats = {};
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/AuxXxilium/arc/page/docs/models.json", function (result) {
_models = JSON.parse(result);
httpGetAsync("https://raw.githubusercontent.com/AuxXxilium/arc/page/docs/pats.json", function (result) {
_pats = JSON.parse(result);
httpGetAsync("https://raw.githubusercontent.com/AuxXxilium/arc/page/docs/addons.json", function (result) {
_addons = JSON.parse(result);
$("#model").on("change", changeModel);
$("#version").on("change", changeVersion);
$("#kernel").on("change", changeKernel);
$('#addons').val("acpid,cpuinfo,powersched");
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="30%">`);
}
function changeVersion() {
createAddonsBtn();
changeKernel();
}
function createAddonsBtn() {
var extstr = $('#addons').val().split(",");
var idx = 1;
var html = `<div class="form-group-body" id="addons_btns">`;
var selectedModel = $("#model").val();
var platform = null;
// Parse models.json to get the platform for the selected model
$.getJSON('models.json', function(modelsData) {
for (var key in modelsData) {
if (modelsData[key].models.includes(selectedModel)) {
platform = key;
break;
}
}
// Parse addons.json to generate buttons
$.getJSON('addons.json', function(addonsData) {
for (var ext in addonsData) {
// Skip system addons
if (addonsData[ext]["system"] == true) {
continue;
}
var dispar = "";
if (!addonsData[ext][platform]) {
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 onclickext('addons', '${ext}')" autofocus="" title="${addonsData[ext]["description"]}">${ext}</button>&nbsp;`;
}
html += `</div>`;
$('#addons_btns').html(html);
});
});
}
function changeKernel() {
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();
} else {
$("#kernel_item").hide();
}
}
function onclickext(type, ext) {
var btnobj = $("#btn_" + ext);
var extstr = $('#' + type).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);
}
});
$('#' + type).val(extstr.join(","));
}
function createIssues() {
var form = document.getElementById("inputs");
let formData = new FormData(form);
var title = "custom";
var body = {};
var _parameters = ["title", "branch", "format", "model", "version", "kernel", "addons"];
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?assignees=&labels=custom&projects=&template=custom_build.md&title=${title}&body=${body}`;
}
</script>
<title>Arc Loader - Custom</title>
</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">
<img src="https://raw.githubusercontent.com/AuxXxilium/arc/page/docs/arc_loader.png" width="60%" style="margin-left: 100px; margin-right: 100px;">
</pre>
<div class="image" id="products" style="height: 70px; margin-left: 35%;">
<img src="https://www.synology.com/img/products/detail/SA6400/heading.png" width="30%">
</div>
<div class="form-group mt-1 mb-2 ">
<div class="form-group-header">
<p>&nbsp;</p>
</div>
<div class="form-group-body">
<p>&nbsp;</p>
</div>
<div class="form-group-body">
<p>&nbsp;</p>
</div>
</div>
<div class="form-group mt-1 mb-2 ">
<div class="form-group-header">
<label class="color-fg-default text-mono f4">Build is based on <img alt="GitHub Release" src="https://img.shields.io/github/v/release/AuxXxilium/arc?display_name=release&style=flat-square"></label>
</div>
<div class="form-group-body">
<label class="color-fg-default text-mono f4">You should only use custom Builds, if you don't have physical access or online connection for destination device.<br />
Custom builds are not stable everytime, have limited features and there will no Arc Patch be available!!!<br />
To get full features and options, use <a href="https://github.com/AuxXxilium/arc">Arc Loader</a>! Check the <a href="https://auxxxilium.tech/wiki" target="_blank">Wiki</a> before you start a build.</label>
</div>
<div class="form-group-body">
<p>&nbsp;</p>
</div>
</div>
<div class="form-group mt-1 mb-2" id="title_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f5">Title:</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 f5">Branch:</label>
</div>
<div class="form-group-body">
<select class="form-select form-control select-sm input-contrast" id="branch" name="inputs[branch]"
value="">
<option selected="selected" value="evo">evolution</option>
</select>
</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 f5">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="dyn">vmdk-dyn</option>
<option value="flat">vmdk-flat</option>
<option value="vhdx">vhdx</option>
</select>
</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 f5">Model: <a href="https://auxxxilium.tech/wiki/arc-loader-arc-loader/modell-plattform-auswaehlen/" target="_blank">More Information</a></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 f5">Version:</label>
</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 f5">Kernel: (only for SA6400)</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 f5">Addons: <a href="https://auxxxilium.tech/wiki/arc-loader-arc-loader/addons/" target="_blank">More Information</a></label>
</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-body">
<p>&nbsp;</p>
</div>
<div class="workflow-dispatch">
<form id="inputs"><button type="button" class="btn State--merged" onclick="return createIssues()" autofocus="">Start Build</button></form>
</div>
</div>
<footer class="footer width-full container-xl mt-3 text-center color-fg-muted">
<a aria-label="AuxXxilium" title="GitHub" class="footer-octicon mr-2" href="https://github.com/AuxXxilium">
<img class="avatar rounded-2 avatar-user" src="https://avatars.githubusercontent.com/u/67025065?v=4"
width="40" height="40" alt="AuxXxilium" />
</a>
<span>Copyright © 2024 by <a href="https://github.com/AuxXxilium">AuxXxilium</a><br>&nbsp;</span>
</footer>
</body>
</html>

View File

@@ -1,6 +0,0 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<script language="javascript"> location.replace("./custom.html")</script>
</head>
</html>

View File

@@ -1,171 +0,0 @@
{
"apollolake": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "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"
},
"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"
},
"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"
},
"models": [
"FS3410",
"SA3410",
"SA3610"
]
},
"broadwellntbap": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302"
},
"models": [
"SA3200D",
"SA3400D"
]
},
"denverton": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "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"
},
"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"
},
"models": [
"FS6400",
"HD6500"
]
},
"r1000": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "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"
},
"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"
},
"models": [
"SA6400"
]
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1117
files/initrd/opt/arc/arc.sh Executable file

File diff suppressed because it is too large Load Diff

330
files/initrd/opt/arc/boot.sh Executable file
View File

@@ -0,0 +1,330 @@
#!/usr/bin/env bash
set -e
[[ -z "${ARC_PATH}" || ! -d "${ARC_PATH}/include" ]] && ARC_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"
. ${ARC_PATH}/include/functions.sh
# Clear logs for dbgutils addons
rm -rf "${PART1_PATH}/logs" >/dev/null 2>&1 || true
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
[ "${BUILDDONE}" == "false" ] && die "Loader build not completed!"
ARC_BRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
# Get Loader Disk Bus
[ -z "${LOADER_DISK}" ] && die "Loader Disk not found!"
BUS=$(getBus "${LOADER_DISK}")
# Check if machine has EFI
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0
# Print Title centralized
clear
COLUMNS=${COLUMNS:-50}
BANNER="$(figlet -c -w "$(((${COLUMNS})))" "Arc Loader")"
TITLE="Version:"
TITLE+=" ${ARC_VERSION} (${ARC_BUILD})"
[ -n "${ARC_BRANCH}" ] && TITLE+=" | Branch: ${ARC_BRANCH}"
printf "\033[1;30m%*s\n" ${COLUMNS} ""
printf "\033[1;30m%*s\033[A\n" ${COLUMNS} ""
printf "\033[1;34m%*s\033[0m\n" ${COLUMNS} "${BANNER}"
printf "\033[1;34m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
TITLE="Boot:"
[ ${EFI} -eq 1 ] && TITLE+=" [UEFI]" || TITLE+=" [BIOS]"
TITLE+=" [${BUS}]"
printf "\033[1;34m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
# Check if DSM zImage/Ramdisk is changed, patch it if necessary, update Files if necessary
ZIMAGE_HASH="$(readConfigKey "zimage-hash" "${USER_CONFIG_FILE}")"
ZIMAGE_HASH_CUR="$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print $1}')"
RAMDISK_HASH="$(readConfigKey "ramdisk-hash" "${USER_CONFIG_FILE}")"
RAMDISK_HASH_CUR="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')"
if [ "${ZIMAGE_HASH_CUR}" != "${ZIMAGE_HASH}" ] || [ "${RAMDISK_HASH_CUR}" != "${RAMDISK_HASH}" ]; then
echo -e "\033[1;31mDSM zImage/Ramdisk changed!\033[0m"
livepatch
echo
fi
# Read model/system 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}")"
LKM="$(readConfigKey "lkm" "${USER_CONFIG_FILE}")"
CPU="$(echo $(cat /proc/cpuinfo 2>/dev/null | grep 'model name' | uniq | awk -F':' '{print $2}'))"
RAMTOTAL="$(awk '/MemTotal:/ {printf "%.0f\n", $2 / 1024 / 1024 + 0.5}' /proc/meminfo 2>/dev/null)"
VENDOR="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
DSMINFO="$(readConfigKey "boot.dsminfo" "${USER_CONFIG_FILE}")"
SYSTEMINFO="$(readConfigKey "boot.systeminfo" "${USER_CONFIG_FILE}")"
DISKINFO="$(readConfigKey "boot.diskinfo" "${USER_CONFIG_FILE}")"
if [ "${DSMINFO}" == "true" ]; then
echo -e "\033[1;37mDSM:\033[0m"
echo -e "Model: \033[1;37m${MODELID:-${MODEL}}\033[0m"
echo -e "Platform: \033[1;37m${PLATFORM}\033[0m"
echo -e "Version: \033[1;37m${PRODUCTVER} (${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))\033[0m"
echo -e "LKM: \033[1;37m${LKM}\033[0m"
echo
fi
if [ "${SYSTEMINFO}" == "true" ]; then
echo -e "\033[1;37mSystem:\033[0m"
echo -e "Vendor: \033[1;37m${VENDOR}\033[0m"
echo -e "CPU: \033[1;37m${CPU}\033[0m"
echo -e "Memory: \033[1;37m${RAMTOTAL}GB\033[0m"
echo
fi
if [ "${DISKINFO}" == "true" ]; then
echo -e "\033[1;37mDisks:\033[0m"
echo -e "Disks: \033[1;37m$(lsblk -dpno NAME | grep -v "${LOADER_DISK}" | wc -l)\033[0m"
fi
if ! readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then
HASATA=0
for D in $(lsblk -dpno NAME); do
[ "${D}" == "${LOADER_DISK}" ] && continue
if echo "sata sas scsi" | grep -qw "$(getBus "${D}")"; then
HASATA=1
break
fi
done
[ ${HASATA} -eq 0 ] && echo -e "\033[1;31m*** Please insert at least one Sata/SAS/SCSI Disk for System installation, except for the Bootloader Disk. ***\033[0m"
fi
# Read necessary variables
VID="$(readConfigKey "vid" "${USER_CONFIG_FILE}")"
PID="$(readConfigKey "pid" "${USER_CONFIG_FILE}")"
SN="$(readConfigKey "sn" "${USER_CONFIG_FILE}")"
KERNELPANIC="$(readConfigKey "kernelpanic" "${USER_CONFIG_FILE}")"
DT="$(readConfigKey "platforms.${PLATFORM}.dt" "${P_FILE}")"
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
EMMCBOOT="$(readConfigKey "emmcboot" "${USER_CONFIG_FILE}")"
MODBLACKLIST="$(readConfigKey "modblacklist" "${USER_CONFIG_FILE}")"
ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
declare -A CMDLINE
# Automated Cmdline
CMDLINE['syno_hw_version']="${MODELID:-${MODEL}}"
CMDLINE['vid']="${VID:-"0x46f4"}" # Sanity check
CMDLINE['pid']="${PID:-"0x0001"}" # Sanity check
CMDLINE['sn']="${SN}"
# Boot 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
# DSM Cmdline
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"
fi
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['skip_vender_mac_interfaces']="0,1,2,3,4,5,6,7"
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['rootwait']=""
CMDLINE['loglevel']="15"
CMDLINE['log_buf_len']="32M"
CMDLINE['panic']="${KERNELPANIC:-0}"
CMDLINE['pcie_aspm']="off"
CMDLINE['modprobe.blacklist']="${MODBLACKLIST}"
#[ $(cat /proc/cpuinfo | grep Intel | wc -l) -gt 0 ] && CMDLINE["intel_pstate"]="disable"
#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 "epyc7002 purley broadwellnkv2" | grep -wq "${PLATFORM}"; then
if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "mpt3sas"; then
[ ! "${CMDLINE['modprobe.blacklist']}" == "" ] && CMDLINE['modprobe.blacklist']+=","
CMDLINE['modprobe.blacklist']+="mpt3sas"
fi
fi
# CMDLINE['kvm.ignore_msrs']="1"
# CMDLINE['kvm.report_ignored_msrs']="0"
if echo "apollolake geminilake" | grep -wq "${PLATFORM}"; then
CMDLINE["intel_iommu"]="igfx_off"
fi
if echo "purley broadwellnkv2" | grep -wq "${PLATFORM}"; then
CMDLINE["SASmodel"]="1"
fi
# Cmdline NIC Settings
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
ETHM=$(readConfigKey "${MODEL}.ports" "${S_FILE}" 2>/dev/null)
ETHN=$(echo ${ETHX} | wc -w)
[ -z "${ETHM}" ] && ETHM=${ETHN}
NIC=0
for N in ${ETHX}; do
MAC="$(readConfigKey "${N}" "${USER_CONFIG_FILE}")"
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | tr '[:lower:]' '[:upper:]')" || NIC=$((${NIC} + 1))
[ ${NIC} -le ${ETHM} ] && CMDLINE["mac${NIC}"]="${MAC}"
[ ${NIC} -ge ${ETHM} ] && break
done
CMDLINE['netif_num']="${NIC}"
# Read user network settings
while IFS=': ' read -r KEY VALUE; do
[ -n "${KEY}" ] && CMDLINE["network.${KEY}"]="${VALUE}"
done < <(readConfigMap "network" "${USER_CONFIG_FILE}")
# Read user cmdline
while IFS=': ' read -r KEY VALUE; do
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}")
# Prepare command line
CMDLINE_LINE=""
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 "${CMDLINE_LINE}" >"${PART1_PATH}/cmdline.yml"
function _bootwait() {
# Exec Bootwait to check SSH/Web connection
BOOTWAIT=5
busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WB
MSG=""
while test ${BOOTWAIT} -ge 0; do
MSG="\033[1;33mAccess SSH/Web will interrupt boot...\033[0m"
echo -en "\r${MSG}"
busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WC
if ! diff WB WC >/dev/null 2>&1; then
echo -en "\r\033[1;33mAccess SSH/Web detected and boot 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"
return 0
}
# Boot
DIRECTBOOT="$(readConfigKey "directboot" "${USER_CONFIG_FILE}")"
if [ "${DIRECTBOOT}" == "true" ]; then
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 || true
echo -e "\033[1;34mReboot with Directboot\033[0m"
reboot
exit 0
elif [ "${DIRECTBOOT}" == "false" ]; then
grub-editenv ${USER_GRUBENVFILE} unset dsm_cmdline
grub-editenv ${USER_GRUBENVFILE} unset next_entry
KERNELLOAD="$(readConfigKey "kernelload" "${USER_CONFIG_FILE}")"
BOOTIPWAIT="$(readConfigKey "bootipwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTIPWAIT}" ] && BOOTIPWAIT=30
IPCON=""
if [ "${ARCPATCH}" == "true" ]; then
echo -e "\033[1;37mDetected ${ETHN} NIC\033[0m | \033[1;34mUsing ${NIC} NIC for Arc Patch:\033[0m"
else
echo -e "\033[1;37mDetected ${ETHN} NIC:\033[0m"
fi
echo
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
sleep 3
for N in ${ETHX}; do
COUNT=0
DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
while true; do
if [ "0" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then
echo -e "\r${DRIVER}: \033[1;37mNOT CONNECTED\033[0m"
break
fi
COUNT=$((${COUNT} + 1))
IP="$(getIP ${N})"
if [ -n "${IP}" ]; then
SPEED=$(ethtool ${N} 2>/dev/null | grep "Speed:" | awk '{print $2}')
if [[ "${IP}" =~ ^169\.254\..* ]]; then
echo -e "\r${DRIVER} (${SPEED}): \033[1;37mLINK LOCAL (No DHCP server found.)\033[0m"
else
echo -e "\r${DRIVER} (${SPEED}): \033[1;37m${IP}\033[0m"
[ -z "${IPCON}" ] && IPCON="${IP}"
fi
break
fi
if [ -z "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then
echo -e "\r${DRIVER}: \033[1;37mDOWN\033[0m"
break
fi
if [ ${COUNT} -ge ${BOOTIPWAIT} ]; then
echo -e "\r${DRIVER}: \033[1;37mTIMEOUT\033[0m"
break
fi
sleep 1
done
done
_bootwait || true
DSMLOGO="$(readConfigKey "boot.dsmlogo" "${USER_CONFIG_FILE}")"
if [ "${DSMLOGO}" == "true" ] && [ -c "/dev/fb0" ]; then
[[ "${IPCON}" =~ ^169\.254\..* ]] && IPCON=""
[ -n "${IPCON}" ] && URL="http://${IPCON}:5000" || URL="http://find.synology.com/"
python ${ARC_PATH}/include/functions.py makeqr -d "${URL}" -l "6" -o "${TMP_PATH}/qrcode_boot.png"
[ -f "${TMP_PATH}/qrcode_boot.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_boot.png" >/dev/null 2>/dev/null || true
fi
for T in $(w 2>/dev/null | grep -v 'TTY' | awk '{print $2}'); do
if [ -w "/dev/${T}" ]; then
[ -n "${IPCON}" ] && echo -e "Use \033[1;34mhttp://${IPCON}:5000\033[0m or try \033[1;34mhttp://find.synology.com/ \033[0mto find DSM and proceed.\n\n\033[1;37mThis interface will not be operational. Wait a few minutes.\033[0m\n" >"/dev/${T}" 2>/dev/null || echo -e "Try \033[1;34mhttp://find.synology.com/ \033[0mto find DSM and proceed.\n\n\033[1;37mThis interface will not be operational. Wait a few minutes.\nNo IP found.\033[0m\n" >"/dev/${T}" 2>/dev/null
fi
done
echo -e "\033[1;37mLoading DSM Kernel...\033[0m"
# Executes DSM kernel via KEXEC
KEXECARGS="-a"
if [ $(echo "${KVER:-4}" | cut -d'.' -f1) -lt 4 ] && [ ${EFI} -eq 1 ]; then
echo -e "\033[1;33mWarning, running kexec with --noefi param, strange things will happen!!\033[0m"
KEXECARGS+=" --noefi"
fi
kexec ${KEXECARGS} -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE}" >"${LOG_FILE}" 2>&1 || dieLog
echo -e "\033[1;37mBooting DSM...\033[0m"
# Boot to DSM
[ "${KERNELLOAD}" == "kexec" ] && kexec -e || poweroff
exit 0
fi

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
read_u8() {
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]+'
}
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))
tail -c+$(($inner_pos + 1)) $1 | tail -c+$(($payload_offset + 1)) | head -c $(($payload_length)) | head -c $(($payload_length - 4)) | unlzma >$2

View File

@@ -0,0 +1,42 @@
#!/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

View File

@@ -0,0 +1,64 @@
#!/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 -o ! -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

Binary file not shown.

View File

@@ -0,0 +1,109 @@
###############################################################################
# Return list of available addons
# 1 - Platform
function availableAddons() {
if [ -z "${1}" ]; then
echo ""
return 1
fi
local ARCOFFLINE="$(readConfigKey "arc.offline" "${USER_CONFIG_FILE}")"
local ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")"
for D in $(find "${ADDONS_PATH}" -maxdepth 1 -type d 2>/dev/null | sort); do
[ ! -f "${D}/manifest.yml" ] && continue
local ADDON=$(basename ${D})
local AVAILABLE="$(readConfigKey "${1}" "${D}/manifest.yml")"
[ "${AVAILABLE}" = false ] && continue
local SYSTEM=$(readConfigKey "system" "${D}/manifest.yml")
[ "${SYSTEM}" = true ] && continue
if [[ "${ARCOFFLINE}" == "true" || -z "${ARCCONF}" ]] && [[ "${ADDON}" == "amepatch" || "${ADDON}" == "arcdns" ]]; then
continue
fi
if [ "${MACHINE}" != "Native" ] && [ "${ADDON}" == "cpufreqscaling" ]; then
continue
fi
local DESC="$(readConfigKey "description" "${D}/manifest.yml")"
local BETA="$(readConfigKey "beta" "${D}/manifest.yml")"
local TARGET="$(readConfigKey "target" "${D}/manifest.yml")"
[ "${BETA}" = true ] && BETA="(Beta) " || BETA=""
if [ "${TARGET}" == "app" ]; then
[ "${AVAILABLE}" = true ] && echo -e "${ADDON}\t\Z4${BETA}${DESC}\Zn"
elif [ "${TARGET}" == "system" ]; then
[ "${AVAILABLE}" = true ] && echo -e "${ADDON}\t\Z1${BETA}${DESC}\Zn"
else
[ "${AVAILABLE}" = true ] && echo -e "${ADDON}\t${BETA}${DESC}"
fi
done
}
###############################################################################
# Check if addon exist
# 1 - Addon id
# 2 - Platform
# Return ERROR if not exists
function checkAddonExist() {
if [ -z "${1}" ] || [ -z "${2}" ]; then
return 1 # ERROR
fi
# First check generic files
if [ -f "${ADDONS_PATH}/${1}/all.tgz" ]; then
return 0 # OK
fi
return 1 # ERROR
}
###############################################################################
# Install Addon into ramdisk image
# 1 - Addon id
# Return ERROR if not installed
function installAddon() {
if [ -z "${1}" ]; then
return 1
fi
local ADDON="${1}"
mkdir -p "${TMP_PATH}/${ADDON}"
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}"
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}"
chmod +x "${RAMDISK_PATH}/addons/${ADDON}.sh"
[ -d ${TMP_PATH}/${ADDON}/root ] && (cp -rnf "${TMP_PATH}/${ADDON}/root/"* "${RAMDISK_PATH}/" 2>"${LOG_FILE}")
rm -rf "${TMP_PATH}/${ADDON}"
return 0
}
###############################################################################
# Untar an addon to correct path
# 1 - Addon file path
# Return name of addon on sucess 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
local ADDON=$(readConfigKey "name" "${TMP_PATH}/addon/manifest.yml")
[ -z "${ADDON}" ] && return
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 updateAddon() {
for F in $(ls ${ADDONS_PATH}/*.addon 2>/dev/null); do
local 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
}

View File

@@ -0,0 +1 @@
###############################################################################

View File

@@ -0,0 +1,71 @@
###############################################################################
# Delete a key in config file
# 1 - Path of Key
# 2 - Path of yaml config file
function deleteConfigKey() {
yq eval 'del(.'${1}')' --inplace "${2}" 2>/dev/null
}
###############################################################################
# Write to yaml config file
# 1 - Path of Key
# 2 - Value
# 3 - Path of yaml config file
function writeConfigKey() {
[ "${2}" = "{}" ] && yq eval '.'${1}' = {}' --inplace "${3}" 2>/dev/null || yq eval '.'${1}' = "'"${2}"'"' --inplace "${3}" 2>/dev/null
}
###############################################################################
# Read key value from yaml config file
# 1 - Path of key
# 2 - Path of yaml config file
# Return Value
function readConfigKey() {
RESULT=$(yq eval '.'${1}' | explode(.)' "${2}" 2>/dev/null)
[ "${RESULT}" == "null" ] && echo "" || echo "${RESULT}"
}
###############################################################################
# Write to yaml config file if key not exists
# 1 - Path of Key
# 2 - Value
# 3 - Path of yaml config file
function initConfigKey() {
[ -z "$(readConfigKey "${1}" "${3}")" ] && writeConfigKey "${1}" "${2}" "${3}" || true
}
###############################################################################
# Read Entries as map(key=value) from yaml config file
# 1 - Path of key
# 2 - Path of yaml config file
# Returns map of values
function readConfigMap() {
yq eval '.'${1}' | explode(.) | to_entries | map([.key, .value] | join(": ")) | .[]' "${2}" 2>/dev/null
}
###############################################################################
# Read an array from yaml config file
# 1 - Path of key
# 2 - Path of yaml config file
# Returns array/map of values
function readConfigArray() {
yq eval '.'${1}'[]' "${2}" 2>/dev/null
}
###############################################################################
# Read Entries as array from yaml config file
# 1 - Path of key
# 2 - Path of yaml config file
# Returns array of values
function readConfigEntriesArray() {
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
}

View File

@@ -0,0 +1,50 @@
# Define paths
PART1_PATH="/mnt/p1"
PART2_PATH="/mnt/p2"
PART3_PATH="/mnt/p3"
TMP_PATH="/tmp"
[ -f "${PART1_PATH}/ARC-BRANCH" ] && ARC_BRANCH=$(cat "${PART1_PATH}/ARC-BRANCH") || ARC_BRANCH="null"
[ -f "${PART1_PATH}/ARC-VERSION" ] && ARC_VERSION=$(cat "${PART1_PATH}/ARC-VERSION") || ARC_VERSION="null"
[ -f "${PART1_PATH}/ARC-BUILD" ] && ARC_BUILD=$(cat "${PART1_PATH}/ARC-BUILD") || ARC_BUILD="null"
ARC_TITLE="Arc ${ARC_VERSION}"
RAMDISK_PATH="${TMP_PATH}/ramdisk"
LOG_FILE="${TMP_PATH}/log.txt"
TMP_UP_PATH="${TMP_PATH}/upload"
USER_GRUB_CONFIG="${PART1_PATH}/boot/grub/grub.cfg"
USER_GRUBENVFILE="${PART1_PATH}/boot/grub/grubenv"
USER_CONFIG_FILE="${PART1_PATH}/user-config.yml"
GRUB_PATH="${PART1_PATH}/boot/grub"
ORI_ZIMAGE_FILE="${PART2_PATH}/zImage"
ORI_RDGZ_FILE="${PART2_PATH}/rd.gz"
ARC_BZIMAGE_FILE="${PART3_PATH}/bzImage-arc"
ARC_RAMDISK_FILE="${PART3_PATH}/initrd-arc"
ARC_RAMDISK_USER_FILE="${PART3_PATH}/initrd-user"
MOD_ZIMAGE_FILE="${PART3_PATH}/zImage-dsm"
MOD_RDGZ_FILE="${PART3_PATH}/initrd-dsm"
ADDONS_PATH="${PART3_PATH}/addons"
MODULES_PATH="${PART3_PATH}/modules"
MODEL_CONFIG_PATH="${PART3_PATH}/configs"
PATCH_PATH="${PART3_PATH}/patches"
LKMS_PATH="${PART3_PATH}/lkms"
CUSTOM_PATH="${PART3_PATH}/custom"
USER_UP_PATH="${PART3_PATH}/users"
UNTAR_PAT_PATH="${PART3_PATH}/DSM"
S_FILE="${MODEL_CONFIG_PATH}/serials.yml"
P_FILE="${MODEL_CONFIG_PATH}/platforms.yml"
D_FILE="${MODEL_CONFIG_PATH}/data.yml"
EXTRACTOR_PATH="${PART3_PATH}/extractor"
EXTRACTOR_BIN="syno_extract_system_patch"
HTTPPORT=$(grep -i '^HTTP_PORT=' /etc/arc.conf 2>/dev/null | cut -d'=' -f2)
[ -z "${HTTPPORT}" ] && HTTPPORT=7080 || true
DUFSPORT=$(grep -i '^DUFS_PORT=' /etc/arc.conf 2>/dev/null | cut -d'=' -f2)
[ -z "${DUFSPORT}" ] && DUFSPORT=7304 || true
TTYDPORT=$(grep -i '^TTYD_PORT=' /etc/arc.conf 2>/dev/null | cut -d'=' -f2)
[ -z "${TTYDPORT}" ] && TTYDPORT=7681 || true

View File

@@ -0,0 +1,112 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2023 AuxXxilium <https://github.com/AuxXxilium> and Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
import os, click
WORK_PATH = os.path.abspath(os.path.dirname(__file__))
@click.group()
def cli():
"""
The CLI is a commands to Arc.
"""
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):
out = ver
arr = ver.split('-')
if len(arr) > 0:
a = arr[0].split('.')[0] if len(arr[0].split('.')) > 0 else '0'
b = arr[0].split('.')[1] if len(arr[0].split('.')) > 1 else '0'
c = arr[0].split('.')[2] if len(arr[0].split('.')) > 2 else '0'
d = arr[1] if len(arr) > 1 else '00000'
e = arr[2] if len(arr) > 2 else '0'
out = '{}.{}.{}-{}-{}'.format(a,b,c,d,e)
return out
@cli.command()
@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.
"""
try:
import fcntl, struct
import qrcode
from PIL import Image
FBIOGET_VSCREENINFO = 0x4600
FBIOPUT_VSCREENINFO = 0x4601
FBIOGET_FSCREENINFO = 0x4602
FBDEV = "/dev/fb0"
if data is not None:
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="grey", back_color="black")
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),),)
if file is not None:
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)
(xres, yres) = (1920, 1080)
with open(FBDEV, "rb") as fb:
vi = fcntl.ioctl(fb, FBIOGET_VSCREENINFO, bytes(160))
res = struct.unpack("I" * 40, vi)
if res[0] != 0 and res[1] != 0:
(xres, yres) = (res[0], res[1])
xqr, yqr = (int(xres / 8), int(xres / 8))
img = img.resize((xqr, yqr))
alpha = Image.new("RGBA", (xres, yres), (0, 0, 0, 0))
if int(location) not in range(0, 8):
location = 0
loc = (img.size[0] * int(location), alpha.size[1] - img.size[1])
alpha.paste(img, loc)
alpha.save(output)
except:
pass
if __name__ == "__main__":
cli()

View File

@@ -0,0 +1,583 @@
[[ -z "${ARC_PATH}" || ! -d "${ARC_PATH}/include" ]] && ARC_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" 2>/dev/null && pwd)"
. ${ARC_PATH}/include/consts.sh
. ${ARC_PATH}/include/configFile.sh
. ${ARC_PATH}/include/addons.sh
###############################################################################
# Check loader disk
function checkBootLoader() {
while read 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
command -v awk >/dev/null 2>&1 || return 1
command -v cut >/dev/null 2>&1 || return 1
command -v sed >/dev/null 2>&1 || return 1
command -v tar >/dev/null 2>&1 || return 1
return 0
}
###############################################################################
# Just show error message and dies
function die() {
echo -e "\033[1;41m$@\033[0m"
exit 1
}
###############################################################################
# Show error message with log content and dies
function dieLog() {
echo -en "\n\033[1;41mUNRECOVERY ERROR: "
cat "${LOG_FILE}"
echo -e "\033[0m"
sleep 3
exit 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}
}
###############################################################################
# Generate a number with 6 digits from 1 to 30000
function random() {
printf "%06d" $((${RANDOM} % 30000 + 1))
}
###############################################################################
# Generate a hexa number from 0x00 to 0xFF
function randomhex() {
printf "&02X" "$((${RANDOM} % 255 + 1))"
}
###############################################################################
# Generate a random letter
function genRandomLetter() {
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
}
###############################################################################
# Generate a random digit (0-9A-Z)
function genRandomValue() {
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
}
###############################################################################
# Generate a random serial number for a model
# 1 - Model
# 2 - Arc
# Returns serial number
function generateSerial() {
PREFIX="$(readConfigArray "${1}.prefix" "${S_FILE}" 2>/dev/null | sort -R | tail -1)"
MIDDLE="$(readConfigArray "${1}.middle" "${S_FILE}" 2>/dev/null | sort -R | tail -1)"
if [ "${2}" == "true" ]; then
SUFFIX="arc"
else
SUFFIX="$(readConfigKey "${1}.suffix" "${S_FILE}" 2>/dev/null)"
fi
local SERIAL="${PREFIX:-"0000"}${MIDDLE:-"XXX"}"
case "${SUFFIX:-"alpha"}" in
numeric)
SERIAL+="$(random)"
;;
alpha)
SERIAL+="$(genRandomLetter)$(genRandomValue)$(genRandomValue)$(genRandomValue)$(genRandomValue)$(genRandomValue)"
;;
arc)
SERIAL+="$(readConfigKey "${1}.serial" "${S_FILE}" 2>/dev/null)"
;;
esac
SERIAL="$(echo "${SERIAL}" | tr '[:lower:]' '[:upper:]')"
echo "${SERIAL}"
return 0
}
###############################################################################
# Generate a MAC address for a model
# 1 - Model
# 2 - Amount of MACs to generate
# 3 - Arc MAC
# Returns serial number
function generateMacAddress() {
MACPRE="$(readConfigKey "${1}.macpre" "${S_FILE}")"
if [ "${3}" == "true" ]; then
MACSUF="$(readConfigKey "${1}.mac" "${S_FILE}" 2>/dev/null)"
else
MACSUF="$(printf '%02x%02x%02x' $((${RANDOM} % 256)) $((${RANDOM} % 256)) $((${RANDOM} % 256)))"
fi
NUM=${2:-1}
local MACS=""
for I in $(seq 1 ${NUM}); do
MACS+="$(printf '%06x%06x' $((0x${MACPRE:-"001132"})) $(($((0x${MACSUF})) + ${I})))"
[ ${I} -lt ${NUM} ] && MACS+=" "
done
MACS="$(echo "${MACS}" | tr '[:lower:]' '[:upper:]')"
echo "${MACS}"
return 0
}
###############################################################################
# Validate a serial number for a model
# 1 - Model
# 2 - Serial number to test
# Returns 1 if serial number is invalid
function validateSerial() {
PREFIX="$(readConfigArray "${1}.prefix" "${S_FILE}" 2>/dev/null)"
MIDDLE="$(readConfigArray "${1}.middle" "${S_FILE}" 2>/dev/null)"
SUFFIX="$(readConfigKey "${1}.suffix" "${S_FILE}" 2>/dev/null)"
P=${2:0:4}
M=${2:4:3}
S=${2:7}
L=${#2}
if [ ${L} -ne 13 ]; then
return 1
fi
if ! arrayExistItem ${P} ${PREFIX}; then
return 1
fi
if ! arrayExistItem ${M} ${MIDDLE}; then
return 1
fi
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
}
###############################################################################
# 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}
}
###############################################################################
# Get values in .conf K=V file
# 1 - key
# 2 - file
function _get_conf_kv() {
grep "${1}" "${2}" | sed "s|^${1}=\"\(.*\)\"$|\1|g"
}
###############################################################################
# Replace/remove/add values in .conf K=V file
# 1 - name
# 2 - new_val
# 3 - path
function _set_conf_kv() {
# Delete
if [ -z "${2}" ]; then
sed -i "${3}" -e "s/^${1}=.*$//"
return $?;
fi
# Replace
if grep -q "^${1}=" "${3}"; then
sed -i "${3}" -e "s\"^${1}=.*\"${1}=\\\"${2}\\\"\""
return $?
fi
# Add if doesn't exist
echo "${1}=\"${2}\"" >>"${3}"
}
###############################################################################
# sort netif busid
function _sort_netif() {
local ETHLIST=""
local ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
for N in ${ETHX}; do
local MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g; s/.*/\L&/')"
local BUS="$(ethtool -i ${N} 2>/dev/null | grep bus-info | cut -d' ' -f2)"
ETHLIST="${ETHLIST}${BUS} ${MAC} ${N}\n"
done
local ETHLISTTMPB="$(echo -e "${ETHLIST}" | sort)"
local ETHLIST="$(echo -e "${ETHLISTTMPB}" | grep -v '^$')"
local ETHSEQ="$(echo -e "${ETHLIST}" | awk '{print $3}' | sed 's/eth//g')"
local ETHNUM="$(echo -e "${ETHLIST}" | wc -l)"
# sort
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() {
local BUS=""
# 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 '{print $2}' | awk -F':' '{print $(NF-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() {
local IP=""
MACR="$(cat /sys/class/net/${1}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
if [ -n "${IPR}" ]; then
IFS='/' read -r -a IPRA <<<"${IPR}"
IP=${IPRA[0]}
else
if [ -n "${1}" ] && [ -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} scope global 2>/dev/null | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | 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 scope global 2>/dev/null | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1)
fi
fi
echo "${IP}"
return 0
}
###############################################################################
# get logo of model
# 1 - model
function getLogo() {
local MODEL="${1}"
rm -f "${PART3_PATH}/logo.png"
STATUS=$(curl -skL -m 10 -w "%{http_code}" "https://www.synology.com/api/products/getPhoto?product=${MODEL/+/%2B}&type=img_s&sort=0" -o "${PART3_PATH}/logo.png")
if [ $? -ne 0 -o ${STATUS:-0} -ne 200 -o ! -f "${PART3_PATH}/logo.png" ]; then
rm -f "${PART3_PATH}/logo.png"
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
}
###############################################################################
# Find and mount the DSM root filesystem
function findDSMRoot() {
local DSMROOTS=""
[ -z "${DSMROOTS}" ] && DSMROOTS="$(mdadm --detail --scan 2>/dev/null | 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
}
###############################################################################
# Convert Netmask eq. 255.255.255.0 to /24
# 1 - Netmask
function convert_netmask() {
bits=0
for octet in $(echo $1| sed 's/\./ /g'); do
binbits=$(echo "obase=2; ibase=10; ${octet}"| bc | sed 's/0//g')
bits=$((${bits} + ${#binbits}))
done
echo "${bits}"
}
###############################################################################
# check Cmdline
# 1 - key name
# 2 - key string
function checkCmdline() {
return $(grub-editenv ${USER_GRUBENVFILE} list 2>/dev/null | grep "^${1}=" | cut -d'=' -f2- | grep -q "${2}")
}
###############################################################################
# get logo of model
# 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
}
###############################################################################
# get logo of model
# check Cmdline
# 1 - key name
# 2 - key string
function addCmdline() {
local CMDLINE="$(grub-editenv ${USER_GRUBENVFILE} list 2>/dev/null | grep "^${1}=" | cut -d'=' -f2-)"
[ -n "${CMDLINE}" ] && CMDLINE="${CMDLINE} ${2}" || CMDLINE="${2}"
setCmdline "${1}" "${CMDLINE}"
}
###############################################################################
# get logo of model
# 1 - model
function delCmdline() {
local CMDLINE="$(grub-editenv ${USER_GRUBENVFILE} list 2>/dev/null | grep "^${1}=" | cut -d'=' -f2-)"
CMDLINE="$(echo "${CMDLINE}" | sed "s/ *${2}//; s/^[[:space:]]*//;s/[[:space:]]*$//")"
setCmdline "${1}" "${CMDLINE}"
}
###############################################################################
# Rebooting
# (based on pocopico's TCRP code)
function rebootTo() {
local MODES="config recovery junior automated update bios memtest"
[ -z "${1}" ] && exit 1
if ! echo "${MODES}" | grep -qw "${1}"; then exit 1; fi
[ "${1}" == "automated" ] && echo "arc-${MODEL}-${PRODUCTVER}-${ARC_VERSION}" >"${PART3_PATH}/automated"
[ ! -f "${USER_GRUBENVFILE}" ] && grub-editenv ${USER_GRUBENVFILE} create
# echo -e "Rebooting to ${1} mode..."
grub-editenv ${USER_GRUBENVFILE} set next_entry="${1}"
exec reboot
}
###############################################################################
# Copy DSM files to the boot partition
# 1 - DSM root path
function copyDSMFiles() {
if [ -f "${1}/grub_cksum.syno" ] && [ -f "${1}/GRUB_VER" ] && [ -f "${1}/zImage" ] && [ -f "${1}/rd.gz" ]; then
rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/grub_cksum.syno" "${PART2_PATH}/GRUB_VER" >/dev/null
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" >/dev/null
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
}
###############################################################################
# Extract DSM files
# 1 - PAT File
# 2 - Destination Path
function extractDSMFiles() {
rm -f "${LOG_FILE}"
PAT_PATH="${1}"
EXT_PATH="${2}"
header="$(od -bcN2 "${PAT_PATH}" | head -1 | awk '{print $3}')"
case ${header} in
105)
echo -e "Uncompressed tar"
isencrypted="no"
;;
213)
echo -e "Compressed tar"
isencrypted="no"
;;
255)
echo -e "Encrypted tar"
isencrypted="yes"
;;
*)
echo -e "Could not determine if pat file is encrypted or not, maybe corrupted, try again!"
;;
esac
if [ "${isencrypted}" == "yes" ]; then
# Uses the extractor to untar PAT file
LD_LIBRARY_PATH="${EXTRACTOR_PATH}" "${EXTRACTOR_PATH}/${EXTRACTOR_BIN}" "${PAT_PATH}" "${EXT_PATH}" >"${LOG_FILE}" 2>&1
else
# Untar PAT file
tar -xf "${PAT_PATH}" -C "${EXT_PATH}" >"${LOG_FILE}" 2>&1
fi
if [ -f "${EXT_PATH}/grub_cksum.syno" ] && [ -f "${EXT_PATH}/GRUB_VER" ] && [ -f "${EXT_PATH}/zImage" ] && [ -f "${EXT_PATH}/rd.gz" ]; then
rm -f "${LOG_FILE}"
return 0
else
return 1
fi
}
###############################################################################
# Livepatch
function livepatch() {
PVALID="false"
# Patch zImage
echo -n "Patching zImage"
if ${ARC_PATH}/zimage-patch.sh; then
echo -e " - successful!"
PVALID="true"
else
echo -e " - failed!"
PVALID="false"
fi
if [ "${PVALID}" == "true" ]; then
# Patch Ramdisk
echo -n "Patching Ramdisk"
if ${ARC_PATH}/ramdisk-patch.sh; then
echo -e " - successful!"
PVALID="true"
else
echo -e " - failed!"
PVALID="false"
fi
fi
if [ "${PVALID}" == "false" ]; then
echo
echo -e "Patching DSM Files failed! Please stay patient for Update."
sleep 5
exit 1
elif [ "${PVALID}" == "true" ]; then
ZIMAGE_HASH="$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print $1}')"
writeConfigKey "zimage-hash" "${ZIMAGE_HASH}" "${USER_CONFIG_FILE}"
RAMDISK_HASH="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')"
writeConfigKey "ramdisk-hash" "${RAMDISK_HASH}" "${USER_CONFIG_FILE}"
echo "DSM Image patched - Ready!"
fi
}
###############################################################################
# Check NTP and Keyboard Layout
function onlineCheck() {
LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
REGION="$(curl -m 10 -v "http://ip-api.com/line?fields=timezone" 2>/dev/null | tr -d '\n' | cut -d '/' -f1)"
TIMEZONE="$(curl -m 10 -v "http://ip-api.com/line?fields=timezone" 2>/dev/null | tr -d '\n' | cut -d '/' -f2)"
[ -z "${KEYMAP}" ] && KEYMAP="$(curl -m 10 -v "http://ip-api.com/line?fields=countryCode" 2>/dev/null | tr '[:upper:]' '[:lower:]')"
if [ -n "${REGION}" ] && [ -n "${TIMEZONE}" ]; then
writeConfigKey "arc.offline" "false" "${USER_CONFIG_FILE}"
[ $(echo "${ARC_VERSION}" | grep "dev" | wc -l) -eq 0 ] && NEWTAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep -v "dev" | sort -rV | head -1)"
[ $(echo "${ARC_VERSION}" | grep "dev" | wc -l) -gt 0 ] && NEWTAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep "dev" | sort -rV | head -1)"
writeConfigKey "time.region" "${REGION}" "${USER_CONFIG_FILE}"
writeConfigKey "time.timezone" "${TIMEZONE}" "${USER_CONFIG_FILE}"
updateOffline
else
REGION="$(readConfigKey "time.region" "${USER_CONFIG_FILE}")"
TIMEZONE="$(readConfigKey "time.timezone" "${USER_CONFIG_FILE}")"
writeConfigKey "arc.offline" "true" "${USER_CONFIG_FILE}"
fi
[ -n "${TIMEZONE}" ] && [ -n "${REGION}" ] && ln -sf "/usr/share/zoneinfo/${REGION}/${TIMEZONE}" /etc/localtime
if [ -z "${LAYOUT}" ]; then
[ -n "${KEYMAP}" ] && KEYMAP="$(echo ${KEYMAP} | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]' | tr -d '[:punct:]' | tr -d '[:digit:]')"
[ -n "${KEYMAP}" ] && writeConfigKey "keymap" "${KEYMAP}" "${USER_CONFIG_FILE}"
[ -z "${KEYMAP}" ] && KEYMAP="us"
loadkeys ${KEYMAP}
fi
if [ "${KEYMAP}" == "ua" ]; then
poweroff
fi
}
###############################################################################
# Check System
function systemCheck () {
# Get Loader Disk Bus
BUS=$(getBus "${LOADER_DISK}")
[ -z "${LOADER_DISK}" ] && die "Loader Disk not found!"
# Memory: Check Memory installed
RAMTOTAL="$(awk '/MemTotal:/ {printf "%.0f\n", $2 / 1024 / 1024 + 0.5}' /proc/meminfo 2>/dev/null)"
[ -z "${RAMTOTAL}" ] && RAMTOTAL="8"
# Check for Hypervisor
if grep -q "^flags.*hypervisor.*" /proc/cpuinfo; then
MACHINE="$(lscpu | grep Hypervisor | awk '{print $3}')" # KVM or VMware
else
MACHINE="Native"
fi
# Check for AES Support
if ! grep -q "^flags.*aes.*" /proc/cpuinfo; then
AESSYS="false"
else
AESSYS="true"
fi
# Check for ACPI Support
if ! grep -q "^flags.*acpi.*" /proc/cpuinfo; then
ACPISYS="false"
else
ACPISYS="true"
fi
# Check for CPU Frequency Scaling
CPUFREQUENCIES=$(ls -ltr /sys/devices/system/cpu/cpufreq/* 2>/dev/null | wc -l)
if [ ${CPUFREQUENCIES} -gt 1 ] && [ "${ACPISYS}" == "true" ]; then
CPUFREQ="true"
else
CPUFREQ="false"
fi
# Check for Arc Patch
ARCCONF="$(readConfigKey "${MODEL:-SA6400}.serial" "${S_FILE}")"
[ -z "${ARCCONF}" ] && writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
}
###############################################################################
# Generate HardwareID
function genHWID () {
HWID="$(echo $(dmidecode -t 4 | grep ID | sed 's/.*ID://;s/ //g' | head -1) $(ifconfig | grep eth | awk '{print $NF}' | sed 's/://g' | sort | head -1) | sha256sum | awk '{print $1}' | cut -c1-16)" 2>/dev/null
echo "${HWID}"
}
###############################################################################
# Check if port is valid
function check_port() {
if [ -z "${1}" ]; then
return 0
else
if [[ "${1}" =~ ^[0-9]+$ ]] && [ "${1}" -ge 0 ] && [ "${1}" -le 65535 ]; then
return 0
else
return 1
fi
fi
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -0,0 +1,57 @@
# `#: comment
# $1: operation
# N: copy module to ramdisk, do not overwrite an existing file
# F: copy module to ramdisk, overwrite an existing file
# $2: module file name (not module name)
#
# eg: N i915.ko
# kvm
N irqbypass.ko
N kvm-intel.ko
N kvm-amd.ko
N kvm.ko
# acpi
N acpi_call.ko
# misc
N check_signature.ko
# sensors
N coretemp.ko
N k10temp.ko
N hwmon-vid.ko
N it87.ko
N adt7470.ko
N adt7475.ko
N nct6683.ko
N nct6775.ko
# rndis
N mii.ko
N cdc_ether.ko
N rndis_host.ko
N r8152.ko
# iwlwifi
N libarc4.ko
N cfg80211.ko
N mac80211.ko
N iwlwifi.ko
N iwlmvm.ko
N iwldvm.ko
## i915
#N dmabuf.ko
#N drm.ko
#N drm_buddy.ko
#N drm_display_helper.ko
#N drm_kms_helper.ko
#N drm_mipi_dsi.ko
#N drm_panel_orientation_quirks.ko
#N i2c-algo-bit.ko
#N i915-compat.ko
#N intel-gtt.ko
#N ttm.ko
#N i915.ko

View File

@@ -0,0 +1,185 @@
###############################################################################
# Return list of all modules available
# 1 - Platform
# 2 - Kernel Version
function getAllModules() {
local PLATFORM=${1}
local KVER=${2}
if [ -z "${PLATFORM}" ] || [ -z "${KVER}" ]; then
echo ""
return 1
fi
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
if [ "${KERNEL}" == "custom" ]; then
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
else
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
fi
# Get list of all modules
for F in $(ls ${TMP_PATH}/modules/*.ko 2>/dev/null); do
local X=$(basename ${F})
local M=${X:0:-3}
local DESC=$(modinfo ${F} | awk -F':' '/description:/{ print $2}' | awk '{sub(/^[ ]+/,""); print}')
[ -z "${DESC}" ] && DESC="${X}"
echo "${M} \"${DESC}\""
done
rm -rf "${TMP_PATH}/modules"
}
###############################################################################
# Return list of all modules available
# 1 - Platform
# 2 - Kernel Version
# 3 - Module list
function installModules() {
local PLATFORM=${1}
local KVER=${2}
shift 2
local MLIST="${@}"
if [ -z "${PLATFORM}" ] || [ -z "${KVER}" ]; then
echo "ERROR: installModules: Platform or Kernel Version not defined" >"${LOG_FILE}"
return 1
fi
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
if [ "${KERNEL}" == "custom" ]; then
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" 2>"${LOG_FILE}"
else
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" 2>"${LOG_FILE}"
fi
if [ $? -ne 0 ]; then
return 1
fi
local ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
for F in $(ls "${TMP_PATH}/modules/"*.ko 2>/dev/null); do
local M=$(basename ${F})
[ "${ODP}" == "true" -a -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
if echo "${MLIST}" | grep -wq "${M:0:-3}"; then
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
else
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
fi
done
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
if [ "${KERNEL}" == "custom" ]; then
tar -zxf "${CUSTOM_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
# Clean
rm -rf "${TMP_PATH}/modules"
return 0
}
###############################################################################
# add a ko of modules.tgz
# 1 - Platform
# 2 - Kernel Version
# 3 - ko file
function addToModules() {
local PLATFORM=${1}
local KVER=${2}
local KOFILE=${3}
if [ -z "${PLATFORM}" ] || [ -z "${KVER}" ] || [ -z "${KOFILE}" ]; then
echo ""
return 1
fi
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
if [ "${KERNEL}" == "custom" ]; then
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
else
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
fi
cp -f ${KOFILE} ${TMP_PATH}/modules
if [ "${KERNEL}" == "custom" ]; then
tar -zcf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
else
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
fi
}
###############################################################################
# del a ko of modules.tgz
# 1 - Platform
# 2 - Kernel Version
# 3 - ko name
function delToModules() {
local PLATFORM=${1}
local KVER=${2}
local KONAME=${3}
if [ -z "${PLATFORM}" ] || [ -z "${KVER}" ] || [ -z "${KONAME}" ]; then
echo ""
return 1
fi
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
if [ "${KERNEL}" == "custom" ]; then
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
else
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
fi
rm -f ${TMP_PATH}/modules/${KONAME}
if [ "${KERNEL}" == "custom" ]; then
tar -zcf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
else
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
fi
}
###############################################################################
# get depends of ko
# 1 - Platform
# 2 - Kernel Version
# 3 - ko name
function getdepends() {
function _getdepends() {
if [ -f "${TMP_PATH}/modules/${1}.ko" ]; then
depends=($(modinfo "${TMP_PATH}/modules/${1}.ko" 2>/dev/null | grep depends: | awk -F: '{print $2}' | awk '$1=$1' | sed 's/,/ /g'))
if [ ${#depends[@]} -gt 0 ]; then
for k in ${depends[@]}; do
echo "${k}"
_getdepends "${k}"
done
fi
fi
}
local PLATFORM=${1}
local KVER=${2}
local KONAME=${3}
if [ -z "${PLATFORM}" ] || [ -z "${KVER}" ] || [ -z "${KONAME}" ]; then
echo ""
return 1
fi
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
if [ "${KERNEL}" == "custom" ]; then
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
else
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
fi
local DPS=($(_getdepends ${KONAME} | tr ' ' '\n' | sort -u))
echo ${DPS[@]}
rm -rf "${TMP_PATH}/modules"
}

View File

@@ -0,0 +1,50 @@
# Get Network Config for Loader
function getnet() {
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
NICPORTS="$(readConfigKey "${MODEL}.ports" "${S_FILE}" 2>/dev/null)"
ETHN=$(echo ${ETHX} | wc -w)
if [ "${ARCPATCH}" == "true" ]; then
MACS=($(generateMacAddress "${MODEL}" "${ETHN}" "true"))
for I in $(seq 1 ${ETHN}); do
eval MAC${I}="${MACS[$((${I} - 1))]}"
writeConfigKey "eth$((${I} - 1))" "${MACS[$((${I} - 1))]}" "${USER_CONFIG_FILE}"
done
elif [ "${ARCPATCH}" == "false" ]; then
MACS=($(generateMacAddress "${MODEL}" "${ETHN}" "false"))
for I in $(seq 1 ${ETHN}); do
eval MAC${I}="${MACS[$((${I} - 1))]}"
writeConfigKey "eth$((${I} - 1))" "${MACS[$((${I} - 1))]}" "${USER_CONFIG_FILE}"
done
elif [ "${ARCPATCH}" == "user" ]; then
# User Mac
for N in ${ETHX}; do
while true; do
MAC="$(cat /sys/class/net/${N}/address | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
dialog --backtitle "$(backtitle)" --title "Mac Setting" \
--inputbox "Type a custom MAC for ${ETH} (Eq. 001132abc123)." 7 50 "${MAC}"\
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && break
MAC=$(cat "${TMP_PATH}/resp")
[ -z "${MAC}" ] && MAC="$(readConfigKey "${N}" "${USER_CONFIG_FILE}")"
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
MAC="$(echo "${MAC}" | tr '[:lower:]' '[:upper:]')"
if [ ${#MAC} -eq 12 ]; then
writeConfigKey "${N}" "${MAC}" "${USER_CONFIG_FILE}"
break
else
dialog --backtitle "$(backtitle)" --title "Mac Setting" --msgbox "Invalid MAC - Try again!" 5 50
fi
done
done
fi
}
# Get Amount of NIC
ETHX="$(ls /sys/class/net 2>/dev/null | grep eth)"
# Get actual IP
for ETH in ${ETHX}; do
IPCON=$(getIP ${ETH})
[ -n "${IPCON}" ] && break
done

View File

@@ -0,0 +1,254 @@
# Get PortMap for Loader
function getmap() {
# Sata Disks
SATADRIVES=0
# Clean old files
[ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax"
touch "${TMP_PATH}/drivesmax"
[ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon"
touch "${TMP_PATH}/drivescon"
[ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports"
touch "${TMP_PATH}/ports"
[ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap"
touch "${TMP_PATH}/remap"
if [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
let DISKIDXMAPIDX=0
DISKIDXMAP=""
let DISKIDXMAPIDXMAX=0
DISKIDXMAPMAX=""
for PCI in $(lspci -d ::106 | awk '{print $1}'); do
NUMPORTS=0
CONPORTS=0
unset HOSTPORTS
declare -A HOSTPORTS
while read -r LINE; do
ATAPORT="$(echo ${LINE} | grep -o 'ata[0-9]*')"
PORT=$(echo ${ATAPORT} | sed 's/ata//')
HOSTPORTS[${PORT}]=$(echo ${LINE} | grep -o 'host[0-9]*$')
done < <(ls -l /sys/class/scsi_host | grep -F "${PCI}")
while read -r PORT; do
ls -l /sys/block | grep -F -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
PCMD=$(cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd)
[ ${PCMD} = 0 ] && DUMMY=1 || DUMMY=0
[ ${ATTACH} = 1 ] && CONPORTS="$((${CONPORTS} + 1))" && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports"
[ ${DUMMY} = 1 ] # Do nothing for now
NUMPORTS=$((${NUMPORTS} + 1))
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
[ ${NUMPORTS} -gt 8 ] && NUMPORTS=8
[ ${CONPORTS} -gt 8 ] && CONPORTS=8
echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax"
echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon"
DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX)
let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS
DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX)
let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS
SATADRIVES=$((${SATADRIVES} + ${CONPORTS}))
done
fi
# SAS Disks
SASDRIVES=0
if [ $(lspci -d ::107 | wc -l) -gt 0 ]; then
for PCI in $(lspci -d ::107 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
SASDRIVES=$((${SASDRIVES} + ${PORTNUM}))
done
fi
# SCSI Disks
SCSIDRIVES=0
if [ $(lspci -d ::100 | wc -l) -gt 0 ]; then
for PCI in $(lspci -d ::100 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort - 2>/dev/null)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
SCSIDRIVES=$((${SCSIDRIVES} + ${PORTNUM}))
done
fi
# Raid Disks
RAIDDRIVES=0
if [ $(lspci -d ::104 | wc -l) -gt 0 ]; then
for PCI in $(lspci -d ::104 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
RAIDDRIVES=$((${RAIDDRIVES} + ${PORTNUM}))
done
fi
# USB Disks
USBDRIVES=0
if [[ -d "/sys/class/scsi_host" && $(ls -l /sys/class/scsi_host | grep usb | wc -l) -gt 0 ]]; then
for PCI in $(lspci -d ::c03 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
[ ${PORTNUM} -eq 0 ] && continue
USBDRIVES=$((${USBDRIVES} + ${PORTNUM}))
done
fi
# MMC Disks
MMCDRIVES=0
if [[ -d "/sys/class/mmc_host" && $(ls -l /sys/class/mmc_host | grep mmc_host | wc -l) -gt 0 ]]; then
for PCI in $(lspci -d ::805 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORTNUM=$(ls -l /sys/block/mmc* | grep "${PCI}" | wc -l 2>/dev/null)
[ ${PORTNUM} -eq 0 ] && continue
MMCDRIVES=$((${MMCDRIVES} + ${PORTNUM}))
done
fi
# NVMe Disks
NVMEDRIVES=0
if [ $(lspci -d ::108 | wc -l) -gt 0 ]; then
for PCI in $(lspci -d ::108 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/nvme | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/nvme//' | sort -n 2>/dev/null)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[N:${PORT}:" | wc -l)
NVMEDRIVES=$((${NVMEDRIVES} + ${PORTNUM}))
done
fi
# Disk Count for MaxDisks
DRIVES=$((${SATADRIVES} + ${SASDRIVES} + ${SCSIDRIVES} + ${RAIDDRIVES} + ${USBDRIVES} + ${MMCDRIVES} + ${NVMEDRIVES}))
HARDDRIVES=$((${SATADRIVES} + ${SASDRIVES} + ${SCSIDRIVES} + ${RAIDDRIVES} + ${NVMEDRIVES}))
writeConfigKey "device.satadrives" "${SATADRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.sasdrives" "${SASDRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.scsidrives" "${SCSIDRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.raiddrives" "${RAIDDRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.usbdrives" "${USBDRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.mmcdrives" "${MMCDRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.nvmedrives" "${NVMEDRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.drives" "${DRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.harddrives" "${HARDDRIVES}" "${USER_CONFIG_FILE}"
# Check for Sata Boot
if [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
LASTDRIVE=0
while read -r D; do
if [ "${BUS}" == "sata" ] && [ "${MACHINE}" != "Native" ] && [ ${D} -eq 0 ]; then
MAXDISKS=${DRIVES}
echo -n "${D}>${MAXDISKS}:">>"${TMP_PATH}/remap"
elif [ ${D} != ${LASTDRIVE} ]; then
echo -n "${D}>${LASTDRIVE}:">>"${TMP_PATH}/remap"
LASTDRIVE=$((${LASTDRIVE} + 1))
elif [ ${D} == ${LASTDRIVE} ]; then
LASTDRIVE=$((${D} + 1))
fi
done < <(cat "${TMP_PATH}/ports")
fi
}
function getmapSelection() {
# Compute PortMap Options
SATAPORTMAPMAX="$(awk '{print $1}' "${TMP_PATH}/drivesmax")"
SATAPORTMAP="$(awk '{print $1}' "${TMP_PATH}/drivescon")"
SATAREMAP="$(awk '{print $1}' "${TMP_PATH}/remap" | sed 's/.$//')"
EXTERNALCONTROLLER="$(readConfigKey "device.externalcontroller" "${USER_CONFIG_FILE}")"
ARCMODE="$(readConfigKey "arc.mode" "${USER_CONFIG_FILE}")"
if [ "${ARCMODE}" == "config" ]; then
# Show recommended Option to user
if [ -n "${SATAREMAP}" ] && [ "${EXTERNALCONTROLLER}" == "true" ] && [ "${MACHINE}" == "Native" ]; then
REMAP2="*"
elif [ -n "${SATAREMAP}" ] && [ "${EXTERNALCONTROLLER}" == "false" ]; then
REMAP3="*"
else
REMAP1="*"
fi
# Ask for Portmap
if [ "${STEP}" == "storagemap" ]; then
dialog --backtitle "$(backtitlep)" --title "Sata Portmap" \
--menu "Choose a Portmap for Sata!?\n* Recommended Option" 8 60 0 \
1 "DiskIdxMap: Active Ports ${REMAP1}" \
2 "DiskIdxMap: Max Ports ${REMAP2}" \
3 "SataRemap: Remove empty Ports ${REMAP3}" \
4 "AhciRemap: Remove empty Ports (new) ${REMAP4}" \
5 "Set my own Portmap in Config" \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && return 1
resp=$(cat "${TMP_PATH}/resp")
[ -z "${resp}" ] && return 1
else
dialog --backtitle "$(backtitle)" --title "Sata Portmap" \
--menu "Choose a Portmap for Sata!?\n* Recommended Option" 8 60 0 \
1 "DiskIdxMap: Active Ports ${REMAP1}" \
2 "DiskIdxMap: Max Ports ${REMAP2}" \
3 "SataRemap: Remove empty Ports ${REMAP3}" \
4 "AhciRemap: Remove empty Ports (new) ${REMAP4}" \
5 "Set my own Portmap in Config" \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && return 1
resp=$(cat "${TMP_PATH}/resp")
[ -z "${resp}" ] && return 1
fi
if [ ${resp} -eq 1 ]; then
writeConfigKey "arc.remap" "acports" "${USER_CONFIG_FILE}"
elif [ ${resp} -eq 2 ]; then
writeConfigKey "arc.remap" "maxports" "${USER_CONFIG_FILE}"
elif [ ${resp} -eq 3 ]; then
writeConfigKey "arc.remap" "remap" "${USER_CONFIG_FILE}"
elif [ ${resp} -eq 4 ]; then
writeConfigKey "arc.remap" "ahci" "${USER_CONFIG_FILE}"
elif [ ${resp} -eq 5 ]; then
writeConfigKey "arc.remap" "user" "${USER_CONFIG_FILE}"
fi
else
# Show recommended Option to user
if [ -n "${SATAREMAP}" ] && [ "${EXTERNALCONTROLLER}" == "true" ] && [ "${MACHINE}" == "Native" ]; then
writeConfigKey "arc.remap" "maxports" "${USER_CONFIG_FILE}"
elif [ -n "${SATAREMAP}" ] && [ "${EXTERNALCONTROLLER}" == "false" ]; then
writeConfigKey "arc.remap" "remap" "${USER_CONFIG_FILE}"
else
writeConfigKey "arc.remap" "acports" "${USER_CONFIG_FILE}"
fi
fi
# Check Remap for correct config
REMAP="$(readConfigKey "arc.remap" "${USER_CONFIG_FILE}")"
# Write Map to config and show Map to User
if [ "${REMAP}" == "acports" ]; then
writeConfigKey "cmdline.SataPortMap" "${SATAPORTMAP}" "${USER_CONFIG_FILE}"
writeConfigKey "cmdline.DiskIdxMap" "${DISKIDXMAP}" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.sata_remap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.ahci_remap" "${USER_CONFIG_FILE}"
elif [ "${REMAP}" == "maxports" ]; then
writeConfigKey "cmdline.SataPortMap" "${SATAPORTMAPMAX}" "${USER_CONFIG_FILE}"
writeConfigKey "cmdline.DiskIdxMap" "${DISKIDXMAPMAX}" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.sata_remap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.ahci_remap" "${USER_CONFIG_FILE}"
elif [ "${REMAP}" == "remap" ]; then
writeConfigKey "cmdline.sata_remap" "${SATAREMAP}" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.DiskIdxMap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.SataPortMap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.ahci_remap" "${USER_CONFIG_FILE}"
elif [ "${REMAP}" == "ahci" ]; then
writeConfigKey "cmdline.ahci_remap" "${SATAREMAP}" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.DiskIdxMap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.SataPortMap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.sata_remap" "${USER_CONFIG_FILE}"
elif [ "${REMAP}" == "user" ]; then
deleteConfigKey "cmdline.SataPortMap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.DiskIdxMap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.sata_remap" "${USER_CONFIG_FILE}"
deleteConfigKey "cmdline.ahci_remap" "${USER_CONFIG_FILE}"
fi
}
# Check for Controller // 104=RAID // 106=SATA // 107=SAS // 100=SCSI // c03=USB
SATACONTROLLER=$(lspci -d ::106 | wc -l)
writeConfigKey "device.satacontroller" "${SATACONTROLLER}" "${USER_CONFIG_FILE}"
if [ ${SATACONTROLLER} -gt 0 ]; then
writeConfigKey "device.externalcontroller" "false" "${USER_CONFIG_FILE}"
fi
SASCONTROLLER=$(lspci -d ::107 | wc -l)
writeConfigKey "device.sascontroller" "${SASCONTROLLER}" "${USER_CONFIG_FILE}"
if [ ${SASCONTROLLER} -gt 0 ]; then
writeConfigKey "device.externalcontroller" "true" "${USER_CONFIG_FILE}"
fi
SCSICONTROLLER=$(lspci -d ::100 | wc -l)
writeConfigKey "device.scsicontroller" "${SCSICONTROLLER}" "${USER_CONFIG_FILE}"
if [ ${SCSICONTROLLER} -gt 0 ]; then
writeConfigKey "device.externalcontroller" "true" "${USER_CONFIG_FILE}"
fi
RAIDCONTROLLER=$(lspci -d ::104 | wc -l)
writeConfigKey "device.raidcontroller" "${RAIDCONTROLLER}" "${USER_CONFIG_FILE}"
if [ ${RAIDCONTROLLER} -gt 0 ]; then
writeConfigKey "device.externalcontroller" "true" "${USER_CONFIG_FILE}"
fi
# Check Controller for Disks
getmap

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

View File

@@ -0,0 +1,477 @@
###############################################################################
# Update Loader
function updateLoader() {
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
local ARC_BRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
local ARCMODE="$(readConfigKey "arc.mode" "${USER_CONFIG_FILE}")"
local ARCCONF="$(readConfigKey "${MODEL:-SA6400}.serial" "${S_FILE}")"
local TAG="${1}"
[ -n "${ARCCONF}" ] && cp -f "${S_FILE}" "${TMP_PATH}/bak.yml"
if [ -z "${TAG}" ]; then
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
if [ "${ARC_BRANCH}" == "dev" ]; then
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep "dev" | sort -rV | head -1)"
else
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep -v "dev" | sort -rV | head -1)"
fi
if [ -n "${TAG}" ]; then
break
fi
sleep 3
idx=$((${idx} + 1))
done
fi
if [ -n "${TAG}" ]; then
export URL="https://github.com/AuxXxilium/arc/releases/download/${TAG}/update-${TAG}-${ARC_BRANCH}.zip"
export TAG="${TAG}"
{
curl -kL "$URL" -o ${TMP_PATH}/update.zip 2>&1 |
perl -C -lane '
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
$pcent = $F[0];
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
s/ /\xa0/g;
if ($. <= 3) {
$header .= "$_\n";
$/ = "\r" if $. == 2
} else {
print "XXX\n$pcent\n$header$_\nXXX"
}' |
dialog --backtitle "$(backtitle)" --title "Update Loader" \
--gauge "Download Loader: $TAG ..." 14 72
}
if [ -f "${TMP_PATH}/update.zip" ] && [ $(ls -s "${TMP_PATH}/update.zip" | cut -d' ' -f1) -gt 300000 ]; then
dialog --backtitle "$(backtitle)" --title "Update Loader" \
--infobox "Updating Loader..." 3 50
if unzip -oq "${TMP_PATH}/update.zip" -d "/mnt"; then
dialog --backtitle "$(backtitle)" --title "Update Loader" \
--infobox "Update successful!" 3 50
sleep 2
else
if [ "${ARCMODE}" == "update" ]; then
dialog --backtitle "$(backtitle)" --title "Update Loader" --aspect 18 \
--infobox "Update failed!\nTry again later." 0 0
sleep 3
exec reboot
else
return 1
fi
fi
else
if [ "${ARCMODE}" == "update" ]; then
dialog --backtitle "$(backtitle)" --title "Update Loader" --aspect 18 \
--infobox "Update failed!\nTry again later." 0 0
sleep 3
exec reboot
else
return 1
fi
fi
fi
[ -n "${ARCCONF}" ] && cp -f "${TMP_PATH}/bak.yml" "${S_FILE}"
if [ "${ARCMODE}" == "update" ] && [ "${CONFDONE}" == "true" ]; then
dialog --backtitle "$(backtitle)" --title "Update Loader" --aspect 18 \
--infobox "Update successful! -> Reboot to automated Build Mode..." 3 60
sleep 3
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
rebootTo "automated"
else
dialog --backtitle "$(backtitle)" --title "Update Loader" --aspect 18 \
--infobox "Update successful! -> Reboot to Config Mode..." 3 50
sleep 3
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
rebootTo "config"
fi
}
###############################################################################
# Update Addons
function updateAddons() {
[ -f "${ADDONS_PATH}/VERSION" ] && local ADDONSVERSION="$(cat "${ADDONS_PATH}/VERSION")" || ADDONSVERSION="0.0.0"
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-addons/releases" | jq -r ".[].tag_name" | sort -rV | head -1)"
if [ -n "${TAG}" ]; then
break
fi
sleep 3
idx=$((${idx} + 1))
done
if [ -n "${TAG}" ] && [ "${ADDONSVERSION}" != "${TAG}" ]; then
export URL="https://github.com/AuxXxilium/arc-addons/releases/download/${TAG}/addons-${TAG}.zip"
export TAG="${TAG}"
{
curl -kL "$URL" -o ${TMP_PATH}/addons.zip 2>&1 |
perl -C -lane '
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
$pcent = $F[0];
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
s/ /\xa0/g;
if ($. <= 3) {
$header .= "$_\n";
$/ = "\r" if $. == 2
} else {
print "XXX\n$pcent\n$header$_\nXXX"
}' |
dialog --backtitle "$(backtitle)" --title "Update Addons" \
--gauge "Download Addons: $TAG ..." 14 72
}
if [ -f "${TMP_PATH}/addons.zip" ]; then
rm -rf "${ADDONS_PATH}"
mkdir -p "${ADDONS_PATH}"
dialog --backtitle "$(backtitle)" --title "Update Addons" \
--infobox "Updating Addons..." 3 50
if unzip -oq "${TMP_PATH}/addons.zip" -d "${ADDONS_PATH}"; then
rm -f "${TMP_PATH}/addons.zip"
for F in $(ls ${ADDONS_PATH}/*.addon 2>/dev/null); do
ADDON=$(basename "${F}" | sed 's|.addon||')
rm -rf "${ADDONS_PATH}/${ADDON}"
mkdir -p "${ADDONS_PATH}/${ADDON}"
tar -xaf "${F}" -C "${ADDONS_PATH}/${ADDON}"
rm -f "${F}"
done
dialog --backtitle "$(backtitle)" --title "Update Addons" \
--infobox "Update successful!" 3 50
sleep 2
else
return 1
fi
else
return 1
fi
fi
return 0
}
###############################################################################
# Update Patches
function updatePatches() {
[ -f "${PATCH_PATH}/VERSION" ] && local PATCHESVERSION="$(cat "${PATCH_PATH}/VERSION")" || PATCHESVERSION="0.0.0"
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-patches/releases" | jq -r ".[].tag_name" | sort -rV | head -1)"
if [ -n "${TAG}" ]; then
break
fi
sleep 3
idx=$((${idx} + 1))
done
if [ -n "${TAG}" ] && [ "${PATCHESVERSION}" != "${TAG}" ]; then
export URL="https://github.com/AuxXxilium/arc-patches/releases/download/${TAG}/patches-${TAG}.zip"
export TAG="${TAG}"
{
curl -kL "$URL" -o ${TMP_PATH}/patches.zip 2>&1 |
perl -C -lane '
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
$pcent = $F[0];
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
s/ /\xa0/g;
if ($. <= 3) {
$header .= "$_\n";
$/ = "\r" if $. == 2
} else {
print "XXX\n$pcent\n$header$_\nXXX"
}' |
dialog --backtitle "$(backtitle)" --title "Update Patches" \
--gauge "Download Patches: $TAG ..." 14 72
}
if [ -f "${TMP_PATH}/patches.zip" ]; then
rm -rf "${PATCH_PATH}"
mkdir -p "${PATCH_PATH}"
dialog --backtitle "$(backtitle)" --title "Update Patches" \
--infobox "Updating Patches..." 3 50
if unzip -oq "${TMP_PATH}/patches.zip" -d "${PATCH_PATH}"; then
rm -f "${TMP_PATH}/patches.zip"
dialog --backtitle "$(backtitle)" --title "Update Patches" \
--infobox "Update successful!" 3 50
sleep 2
else
return 1
fi
else
return 1
fi
fi
return 0
}
###############################################################################
# Update Custom
function updateCustom() {
[ -f "${CUSTOM_PATH}/VERSION" ] && local CUSTOMVERSION="$(cat "${CUSTOM_PATH}/VERSION")" || CUSTOMVERSION="0.0.0"
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-custom/releases" | jq -r ".[].tag_name" | sort -rV | head -1)"
if [ -n "${TAG}" ]; then
break
fi
sleep 3
idx=$((${idx} + 1))
done
if [ -n "${TAG}" ] && [ "${CUSTOMVERSION}" != "${TAG}" ]; then
export URL="https://github.com/AuxXxilium/arc-custom/releases/download/${TAG}/custom-${TAG}.zip"
export TAG="${TAG}"
{
curl -kL "$URL" -o ${TMP_PATH}/custom.zip 2>&1 |
perl -C -lane '
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
$pcent = $F[0];
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
s/ /\xa0/g;
if ($. <= 3) {
$header .= "$_\n";
$/ = "\r" if $. == 2
} else {
print "XXX\n$pcent\n$header$_\nXXX"
}' |
dialog --backtitle "$(backtitle)" --title "Update Custom Kernel" \
--gauge "Download Custom Kernel: $TAG ..." 14 72
}
if [ -f "${TMP_PATH}/custom.zip" ]; then
rm -rf "${CUSTOM_PATH}"
mkdir -p "${CUSTOM_PATH}"
dialog --backtitle "$(backtitle)" --title "Update Custom Kernel" \
--infobox "Updating Custom Kernel..." 3 50
if unzip -oq "${TMP_PATH}/custom.zip" -d "${CUSTOM_PATH}"; then
rm -f "${TMP_PATH}/custom.zip"
dialog --backtitle "$(backtitle)" --title "Update Custom Kernel" \
--infobox "Update successful!" 3 50
sleep 2
else
return 1
fi
else
return 1
fi
fi
return 0
}
###############################################################################
# Update Modules
function updateModules() {
[ -f "${MODULES_PATH}/VERSION" ] && local MODULESVERSION="$(cat "${MODULES_PATH}/VERSION")" || MODULESVERSION="0.0.0"
local PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
local PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
local KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
[ "${PLATFORM}" == "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-modules/releases" | jq -r ".[].tag_name" | sort -rV | head -1)"
if [ -n "${TAG}" ]; then
break
fi
sleep 3
idx=$((${idx} + 1))
done
if [ -n "${TAG}" ] && [[ "${MODULESVERSION}" != "${TAG}" || ! -f "${MODULES_PATH}/${PLATFORM}-${KVERP}.tgz" ]]; then
rm -rf "${MODULES_PATH}"
mkdir -p "${MODULES_PATH}"
export URL="https://github.com/AuxXxilium/arc-modules/releases/download/${TAG}/modules-${TAG}.zip"
export TAG="${TAG}"
{
curl -kL "$URL" -o ${TMP_PATH}/modules.zip 2>&1 |
perl -C -lane '
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
$pcent = $F[0];
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
s/ /\xa0/g;
if ($. <= 3) {
$header .= "$_\n";
$/ = "\r" if $. == 2
} else {
print "XXX\n$pcent\n$header$_\nXXX"
}' |
dialog --backtitle "$(backtitle)" --title "Update Modules" \
--gauge "Download Modules: $TAG ..." 14 72
}
if [ -f "${TMP_PATH}/modules.zip" ]; then
dialog --backtitle "$(backtitle)" --title "Update Modules" \
--infobox "Updating Modules..." 3 50
if unzip -oq "${TMP_PATH}/modules.zip" -d "${MODULES_PATH}"; then
rm -f "${TMP_PATH}/modules.zip"
dialog --backtitle "$(backtitle)" --title "Update Modules" \
--infobox "Update successful!" 3 50
sleep 2
else
return 1
fi
else
return 1
fi
if [ -f "${MODULES_PATH}/${PLATFORM}-${KVERP}.tgz" ] && [ -f "${MODULES_PATH}/firmware.tgz" ]; then
dialog --backtitle "$(backtitle)" --title "Update Modules" \
--infobox "Rewrite Modules..." 3 50
sleep 2
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
while read -r ID DESC; do
writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}"
done < <(getAllModules "${PLATFORM}" "${KVERP}")
dialog --backtitle "$(backtitle)" --title "Update Modules" \
--infobox "Rewrite successful!" 3 50
sleep 2
fi
fi
return 0
}
###############################################################################
# Update Configs
function updateConfigs() {
[ -f "${MODEL_CONFIG_PATH}/VERSION" ] && local CONFIGSVERSION="$(cat "${MODEL_CONFIG_PATH}/VERSION")" || CONFIGSVERSION="0.0.0"
local USERID="$(readConfigKey "arc.userid" "${USER_CONFIG_FILE}")"
if [ -z "${1}" ]; then
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-configs/releases" | jq -r ".[].tag_name" | sort -rV | head -1)"
if [ -n "${TAG}" ]; then
break
fi
sleep 3
idx=$((${idx} + 1))
done
else
local TAG="${1}"
fi
if [ -n "${TAG}" ] && [ "${CONFIGSVERSION}" != "${TAG}" ]; then
export URL="https://github.com/AuxXxilium/arc-configs/releases/download/${TAG}/configs-${TAG}.zip"
export TAG="${TAG}"
{
curl -kL "$URL" -o ${TMP_PATH}/configs.zip 2>&1 |
perl -C -lane '
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
$pcent = $F[0];
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
s/ /\xa0/g;
if ($. <= 3) {
$header .= "$_\n";
$/ = "\r" if $. == 2
} else {
print "XXX\n$pcent\n$header$_\nXXX"
}' |
dialog --backtitle "$(backtitle)" --title "Update Configs" \
--gauge "Download Configs: $TAG ..." 14 72
}
if [ -f "${TMP_PATH}/configs.zip" ]; then
mkdir -p "${MODEL_CONFIG_PATH}"
dialog --backtitle "$(backtitle)" --title "Update Configs" \
--infobox "Updating Configs..." 3 50
if unzip -oq "${TMP_PATH}/configs.zip" -d "${MODEL_CONFIG_PATH}"; then
rm -f "${TMP_PATH}/configs.zip"
dialog --backtitle "$(backtitle)" --title "Update Configs" \
--infobox "Update successful!" 3 50
sleep 2
[ -z "${USERID}" ] && checkHardwareID || true
else
return 1
fi
else
return 1
fi
fi
return 0
}
###############################################################################
# Update LKMs
function updateLKMs() {
[ -f "${LKMS_PATH}/VERSION" ] && local LKMVERSION="$(cat "${LKMS_PATH}/VERSION")" || LKMVERSION="0.0.0"
if [ -z "${1}" ]; then
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-lkm/releases" | jq -r ".[].tag_name" | sort -rV | head -1)"
if [ -n "${TAG}" ]; then
break
fi
sleep 3
idx=$((${idx} + 1))
done
else
local TAG="${1}"
fi
if [ -n "${TAG}" ] && [ "${LKMVERSION}" != "${TAG}" ]; then
export URL="https://github.com/AuxXxilium/arc-lkm/releases/download/${TAG}/rp-lkms.zip"
export TAG="${TAG}"
{
curl -kL "$URL" -o ${TMP_PATH}/rp-lkms.zip 2>&1 |
perl -C -lane '
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
$pcent = $F[0];
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
s/ /\xa0/g;
if ($. <= 3) {
$header .= "$_\n";
$/ = "\r" if $. == 2
} else {
print "XXX\n$pcent\n$header$_\nXXX"
}' |
dialog --backtitle "$(backtitle)" --title "Update LKMs" \
--gauge "Download LKMs: $TAG ..." 14 72
}
if [ -f "${TMP_PATH}/rp-lkms.zip" ]; then
rm -rf "${LKMS_PATH}"
mkdir -p "${LKMS_PATH}"
dialog --backtitle "$(backtitle)" --title "Update LKMs" \
--infobox "Updating LKMs..." 3 50
if unzip -oq "${TMP_PATH}/rp-lkms.zip" -d "${LKMS_PATH}"; then
rm -f "${TMP_PATH}/rp-lkms.zip"
dialog --backtitle "$(backtitle)" --title "Update LKMs" \
--infobox "Update successful!" 3 50
sleep 2
else
return 1
fi
else
return 1
fi
fi
return 0
}
###############################################################################
# Update Offline
function updateOffline() {
local ARCOFFLINE="$(readConfigKey "arc.offline" "${USER_CONFIG_FILE}")"
if [ "${ARCOFFLINE}" != "true" ]; then
[ -f "${MODEL_CONFIG_PATH}/data.yml" ] && cp -f "${MODEL_CONFIG_PATH}/data.yml" "${MODEL_CONFIG_PATH}/data.yml.bak"
curl -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/refs/heads/main/data.yml" -o "${MODEL_CONFIG_PATH}/data.yml"
[ ! -f "${MODEL_CONFIG_PATH}/data.yml" ] && cp -f "${MODEL_CONFIG_PATH}/data.yml.bak" "${MODEL_CONFIG_PATH}/data.yml"
fi
return 0
}
###############################################################################
# Loading Update Mode
function dependenciesUpdate() {
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
FAILED="false"
dialog --backtitle "$(backtitle)" --title "Update Dependencies" --aspect 18 \
--infobox "Updating Dependencies..." 3 40
sleep 2
updateAddons
[ $? -ne 0 ] && FAILED="true"
updateModules
[ $? -ne 0 ] && FAILED="true"
updateCustom
[ $? -ne 0 ] && FAILED="true"
updatePatches
[ $? -ne 0 ] && FAILED="true"
updateLKMs
[ $? -ne 0 ] && FAILED="true"
updateOffline
[ $? -ne 0 ] && FAILED="true"
if [ "${FAILED}" == "true" ]; then
dialog --backtitle "$(backtitle)" --title "Update Dependencies" --aspect 18 \
--infobox "Update failed! Try again later." 3 40
sleep 3
elif [ "${FAILED}" == "false" ]; then
dialog --backtitle "$(backtitle)" --title "Update Dependencies" --aspect 18 \
--infobox "Update successful!" 3 40
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
sleep 3
clear
exec arc.sh
fi
}

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 8 threads
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: yes
Raid controller: yes
SCSI controller: yes
Note: Partially incorrect smart values
- USB storage
As internal: yes
As external: yes
- Intel iGPU
2nd - 9th Gen (Addon required)
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes (sometimes addon required)
Storage: Addon required
System (NVMe only): no

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 16 threads
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: yes
Raid controller: yes
SCSI controller: yes
Note: Partially incorrect smart values
- USB storage
As internal: yes
As external: yes
- Intel iGPU
Unsupported
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes (sometimes addon required)
Storage: Addon required
System (NVMe only): no

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 24 threads
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: yes
Raid controller: yes
SCSI controller: yes
Note: Partially incorrect smart values
- USB storage
As internal: yes
As external: yes
- Intel iGPU
Unsupported
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes (sometimes addon required)
Storage: Addon required
System (NVMe only): no

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 24 threads
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: no
Raid controller: no
SCSI controller: no
Note: Partially incorrect smart values
- USB storage
As internal: no
As external: yes
- Intel iGPU
Unsupported
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes
Storage: Addon required
System (NVMe only): no

View File

@@ -0,0 +1,31 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 16 threads
requires FMA3/MOVBE support
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: yes
Raid controller: yes
SCSI controller: yes
Note: Partially incorrect smart values
- USB storage
As internal: yes
As external: yes
- Intel iGPU
Unsupported
- Nvidia GPU
Partially natively supported
Community Package required *
- NVMe
Cache: yes (sometimes addon required)
Storage: Addon required
System (NVMe only): no

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 24 threads (with CustomKernel up to 128 threads)
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: yes
Raid controller: no
SCSI controller: no
Note: Partially incorrect smart values
- USB storage
As internal: no
As external: yes
- Intel iGPU
up to the 14th generation
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes
Storage: Addon required
System (NVMe only): Addon required

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 8 threads
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: no
Raid controller: no
SCSI controller: no
Note: Partially incorrect smart values
- USB storage
As internal: no
As external: yes
- Intel iGPU
2nd - 9th Gen (Addon required)
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes
Storage: Addon required
System (NVMe only): no

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 64 threads
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: no
Raid controller: no
SCSI controller: no
Note: Partially incorrect smart values
- USB storage
As internal: no
As external: yes
- Intel iGPU
Unsupported
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes
Storage: Addon required
System (NVMe only): no

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 16 threads
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: no
Raid controller: no
SCSI controller: no
Note: Partially incorrect smart values
- USB storage
As internal: no
As external: yes
- Intel iGPU
Unsupported
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes
Storage: Addon required
System (NVMe only): no

View File

@@ -0,0 +1,29 @@
- CPU
Intel: yes
AMD: yes
Note: Not every model runs on every hardware!
Up to 16 threads
- Cache
SSD Cache: yes
- Additional controllers
HBA Controller: no
Raid controller: no
SCSI controller: no
Note: Partially incorrect smart values
- USB storage
As internal: no
As external: yes
- Intel iGPU
Unsupported
- Nvidia GPU
Community Package required *
- NVMe
Cache: yes
Storage: Addon required
System (NVMe only): no

228
files/initrd/opt/arc/init.sh Executable file
View File

@@ -0,0 +1,228 @@
#!/usr/bin/env bash
set -e
[[ -z "${ARC_PATH}" || ! -d "${ARC_PATH}/include" ]] && ARC_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"
. ${ARC_PATH}/include/functions.sh
# Get Loader Disk Bus
[ -z "${LOADER_DISK}" ] && die "Loader Disk not found!"
checkBootLoader || die "The loader is corrupted, please rewrite it!"
BUS=$(getBus "${LOADER_DISK}")
# Check if machine has EFI
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0
# Print Title centralized
clear
COLUMNS=${COLUMNS:-50}
BANNER="$(figlet -c -w "$(((${COLUMNS})))" "Arc Loader")"
TITLE="Version:"
TITLE+=" ${ARC_VERSION} (${ARC_BUILD})"
[ -n "${ARC_BRANCH}" ] && TITLE+=" | Branch: ${ARC_BRANCH}"
printf "\033[1;30m%*s\n" ${COLUMNS} ""
printf "\033[1;30m%*s\033[A\n" ${COLUMNS} ""
printf "\033[1;34m%*s\033[0m\n" ${COLUMNS} "${BANNER}"
printf "\033[1;34m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
TITLE="Boot:"
[ ${EFI} -eq 1 ] && TITLE+=" [UEFI]" || TITLE+=" [BIOS]"
TITLE+=" [${BUS}]"
printf "\033[1;34m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
# Check for Config File
if [ ! -f "${USER_CONFIG_FILE}" ]; then
touch "${USER_CONFIG_FILE}"
fi
initConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
initConfigKey "arc" "{}" "${USER_CONFIG_FILE}"
initConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
initConfigKey "arc.confdone" "false" "${USER_CONFIG_FILE}"
initConfigKey "arc.dynamic" "false" "${USER_CONFIG_FILE}"
initConfigKey "arc.offline" "false" "${USER_CONFIG_FILE}"
initConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
initConfigKey "arc.version" "${ARC_VERSION}" "${USER_CONFIG_FILE}"
initConfigKey "boot" "{}" "${USER_CONFIG_FILE}"
initConfigKey "boot.dsminfo" "true" "${USER_CONFIG_FILE}"
initConfigKey "boot.systeminfo" "true" "${USER_CONFIG_FILE}"
initConfigKey "boot.dsmlogo" "true" "${USER_CONFIG_FILE}"
initConfigKey "bootipwait" "30" "${USER_CONFIG_FILE}"
initConfigKey "device" "{}" "${USER_CONFIG_FILE}"
initConfigKey "directboot" "false" "${USER_CONFIG_FILE}"
initConfigKey "emmcboot" "false" "${USER_CONFIG_FILE}"
initConfigKey "hddsort" "false" "${USER_CONFIG_FILE}"
initConfigKey "kernel" "official" "${USER_CONFIG_FILE}"
initConfigKey "kernelload" "power" "${USER_CONFIG_FILE}"
initConfigKey "kernelpanic" "5" "${USER_CONFIG_FILE}"
initConfigKey "odp" "false" "${USER_CONFIG_FILE}"
initConfigKey "pathash" "" "${USER_CONFIG_FILE}"
initConfigKey "paturl" "" "${USER_CONFIG_FILE}"
initConfigKey "sn" "" "${USER_CONFIG_FILE}"
initConfigKey "cmdline" "{}" "${USER_CONFIG_FILE}"
initConfigKey "keymap" "" "${USER_CONFIG_FILE}"
initConfigKey "layout" "" "${USER_CONFIG_FILE}"
initConfigKey "lkm" "prod" "${USER_CONFIG_FILE}"
initConfigKey "modblacklist" "evbug,cdc_ether" "${USER_CONFIG_FILE}"
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
initConfigKey "model" "" "${USER_CONFIG_FILE}"
initConfigKey "modelid" "" "${USER_CONFIG_FILE}"
initConfigKey "network" "{}" "${USER_CONFIG_FILE}"
initConfigKey "platform" "" "${USER_CONFIG_FILE}"
initConfigKey "productver" "" "${USER_CONFIG_FILE}"
initConfigKey "buildnum" "" "${USER_CONFIG_FILE}"
initConfigKey "smallnum" "" "${USER_CONFIG_FILE}"
initConfigKey "ramdisk-hash" "" "${USER_CONFIG_FILE}"
initConfigKey "rd-compressed" "false" "${USER_CONFIG_FILE}"
initConfigKey "satadom" "2" "${USER_CONFIG_FILE}"
initConfigKey "synoinfo" "{}" "${USER_CONFIG_FILE}"
initConfigKey "time" "{}" "${USER_CONFIG_FILE}"
initConfigKey "usbmount" "auto" "${USER_CONFIG_FILE}"
initConfigKey "zimage-hash" "" "${USER_CONFIG_FILE}"
if grep -q "automated_arc" /proc/cmdline; then
writeConfigKey "arc.mode" "automated" "${USER_CONFIG_FILE}"
elif grep -q "update_arc" /proc/cmdline; then
writeConfigKey "arc.mode" "update" "${USER_CONFIG_FILE}"
elif grep -q "force_arc" /proc/cmdline; then
writeConfigKey "arc.mode" "config" "${USER_CONFIG_FILE}"
else
writeConfigKey "arc.mode" "dsm" "${USER_CONFIG_FILE}"
fi
[ -f "${PART3_PATH}/automated" ] && rm -f "${PART3_PATH}/automated" >/dev/null 2>&1 || true
if [ -n "${ARC_BRANCH}" ]; then
writeConfigKey "arc.branch" "${ARC_BRANCH}" "${USER_CONFIG_FILE}"
fi
# Sort network interfaces
if arrayExistItem "sortnetif:" $(readConfigMap "addons" "${USER_CONFIG_FILE}"); then
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
fi
# Read/Write IP/Mac to config
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
for N in ${ETHX}; do
MACR="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
if [ -n "${IPR}" ] && [ "1" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then
IFS='/' read -r -a IPRA <<<"${IPR}"
ip addr flush dev ${N}
ip addr add ${IPRA[0]}/${IPRA[1]:-"255.255.255.0"} dev ${N}
if [ -n "${IPRA[2]}" ]; then
ip route add default via ${IPRA[2]} dev ${N}
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::3}" == "eth" ] && ethtool -s ${N} wol g 2>/dev/null || true
# [ "${N::3}" == "eth" ] && ethtool -K ${N} rxhash off 2>/dev/null || true
initConfigKey "${N}" "${MACR}" "${USER_CONFIG_FILE}"
done
ETHN=$(echo ${ETHX} | wc -w)
writeConfigKey "device.nic" "${ETHN}" "${USER_CONFIG_FILE}"
# No network devices
echo
[ ${ETHN} -le 0 ] && die "No NIC found! - Loader does not work without Network connection."
# Get the VID/PID if we are in USB
VID="0x46f4"
PID="0x0001"
BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen"
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 ! echo "${BUSLIST}" | grep -wq "${BUS}"; then
die "$(printf "The boot disk does not support the current %s, only %s are supported." "${BUS}" "${BUSLIST// /\/}")"
fi
# Inform user and check bus
echo -e "Loader Disk: \033[1;34m${LOADER_DISK}\033[0m"
echo -e "Loader Disk Type: \033[1;34m${BUS}\033[0m"
echo
# Save variables to user config file
writeConfigKey "vid" "${VID}" "${USER_CONFIG_FILE}"
writeConfigKey "pid" "${PID}" "${USER_CONFIG_FILE}"
# Decide if boot automatically
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
ARCMODE="$(readConfigKey "arc.mode" "${USER_CONFIG_FILE}")"
if [ "${ARCMODE}" == "config" ]; then
echo -e "\033[1;34mStarting Config Mode...\033[0m"
elif [ "${ARCMODE}" == "automated" ]; then
echo -e "\033[1;34mStarting automated Build Mode...\033[0m"
elif [ "${ARCMODE}" == "update" ]; then
echo -e "\033[1;34mStarting Update Mode...\033[0m"
elif [ "${BUILDDONE}" == "true" ] && [ "${ARCMODE}" == "dsm" ]; then
echo -e "\033[1;34mStarting DSM Mode...\033[0m"
if [ -f "${ARC_PATH}/boot.sh" ]; then
exec boot.sh && exit 0
else
echo -e "\033[1;31mError: Can't find Arc System Files...\033[0m"
fi
else
echo -e "\033[1;34mStarting Config Mode...\033[0m"
fi
echo
BOOTIPWAIT="$(readConfigKey "bootipwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTIPWAIT}" ] && BOOTIPWAIT=30
echo -e "\033[1;37mDetected ${ETHN} NIC:\033[0m"
IPCON=""
echo
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
sleep 3
for N in ${ETHX}; do
COUNT=0
DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
while true; do
if [ "0" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then
echo -e "\r${DRIVER}: \033[1;37mNOT CONNECTED\033[0m"
break
fi
COUNT=$((${COUNT} + 1))
IP="$(getIP ${N})"
if [ -n "${IP}" ]; then
SPEED=$(ethtool ${N} 2>/dev/null | grep "Speed:" | awk '{print $2}')
if [[ "${IP}" =~ ^169\.254\..* ]]; then
echo -e "\r${DRIVER} (${SPEED}): \033[1;37mLINK LOCAL (No DHCP server found.)\033[0m"
else
echo -e "\r${DRIVER} (${SPEED}): \033[1;37m${IP}\033[0m"
[ -z "${IPCON}" ] && IPCON="${IP}"
fi
break
fi
if [ -z "$(cat /sys/class/net/${N}}/carrier 2>/dev/null)" ]; then
echo -e "\r${DRIVER}: \033[1;37mDOWN\033[0m"
break
fi
if [ ${COUNT} -ge ${BOOTIPWAIT} ]; then
echo -e "\r${DRIVER}: \033[1;37mTIMEOUT\033[0m"
break
fi
sleep 1
done
done
echo
mkdir -p "${ADDONS_PATH}"
mkdir -p "${CUSTOM_PATH}"
mkdir -p "${LKMS_PATH}"
mkdir -p "${MODEL_CONFIG_PATH}"
mkdir -p "${MODULES_PATH}"
mkdir -p "${PATCH_PATH}"
mkdir -p "${USER_UP_PATH}"
# Load Arc Overlay
echo -e "\033[1;34mLoading Arc Overlay...\033[0m"
echo
echo -e "Use \033[1;34mDisplay Output\033[0m or \033[1;34mhttp://${IPCON}:${TTYDPORT}\033[0m to configure Loader."
# Check memory and load Arc
RAM=$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo 2>/dev/null)
if [ ${RAM} -le 3500 ]; then
echo -e "\033[1;31mYou have less than 4GB of RAM, if errors occur in loader creation, please increase the amount of RAM.\033[0m\n\033[1;31mUse arc.sh to proceed. Not recommended!\033[0m"
else
arc.sh
fi
exit 0

BIN
files/initrd/opt/arc/kpatch Executable file

Binary file not shown.

View File

@@ -0,0 +1,259 @@
#!/usr/bin/env bash
[[ -z "${ARC_PATH}" || ! -d "${ARC_PATH}/include" ]] && ARC_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"
. ${ARC_PATH}/include/functions.sh
. ${ARC_PATH}/include/addons.sh
. ${ARC_PATH}/include/modules.sh
set -o pipefail # Get exit code from process piped
# Sanity check
if [ ! -f "${ORI_RDGZ_FILE}" ]; then
echo "ERROR: ${ORI_RDGZ_FILE} not found!" >"${LOG_FILE}"
exit 1
fi
# Remove old rd.gz patched
rm -f "${MOD_RDGZ_FILE}"
# Unzipping ramdisk
rm -rf "${RAMDISK_PATH}"
mkdir -p "${RAMDISK_PATH}"
(
cd "${RAMDISK_PATH}"
xz -dc <"${ORI_RDGZ_FILE}" | cpio -idm
) >/dev/null 2>&1
# Read Model Data
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
MODELID="$(readConfigKey "modelid" "${USER_CONFIG_FILE}")"
LKM="$(readConfigKey "lkm" "${USER_CONFIG_FILE}")"
SN="$(readConfigKey "sn" "${USER_CONFIG_FILE}")"
LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
RD_COMPRESSED="$(readConfigKey "rd-compressed" "${USER_CONFIG_FILE}")"
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
BUILDNUM="$(readConfigKey "buildnum" "${USER_CONFIG_FILE}")"
SMALLNUM="$(readConfigKey "smallnum" "${USER_CONFIG_FILE}")"
ARCBRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
# Read new PAT Info from Config
PAT_URL="$(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
PAT_HASH="$(readConfigKey "pathash" "${USER_CONFIG_FILE}")"
[ "${PATURL:0:1}" == "#" ] && PATURL=""
[ "${PATSUM:0:1}" == "#" ] && PATSUM=""
# Check if DSM Version changed
. "${RAMDISK_PATH}/etc/VERSION"
if [[ -n "${PRODUCTVER}" && -n "${BUILDNUM}" && -n "${SMALLNUM}" ]] &&
([ "${PRODUCTVER}" != "${majorversion}.${minorversion}" ] || [ "${BUILDNUM}" != "${buildnumber}" ] || [ "${SMALLNUM}" != "${smallfixnumber}" ]); then
OLDVER="${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))"
NEWVER="${majorversion}.${minorversion}(${buildnumber}$([ ${smallfixnumber:-0} -ne 0 ] && echo "u${smallfixnumber}"))"
PAT_URL=""
PAT_HASH=""
fi
PRODUCTVER=${majorversion}.${minorversion}
BUILDNUM=${buildnumber}
SMALLNUM=${smallfixnumber}
writeConfigKey "productver" "${PRODUCTVER}" "${USER_CONFIG_FILE}"
writeConfigKey "buildnum" "${BUILDNUM}" "${USER_CONFIG_FILE}"
writeConfigKey "smallnum" "${SMALLNUM}" "${USER_CONFIG_FILE}"
# Read model data
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
# Modify KVER for Epyc7002
[ "${PLATFORM}" == "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
# Sanity check
if [ -z "${PLATFORM}" ] || [ -z "${KVER}" ]; then
echo "ERROR: Configuration for model ${MODEL} and productversion ${PRODUCTVER} not found." >"${LOG_FILE}"
exit 1
fi
declare -A SYNOINFO
declare -A ADDONS
declare -A MODULES
# Read synoinfo and addons from config
while IFS=': ' read -r KEY VALUE; do
[ -n "${KEY}" ] && SYNOINFO["${KEY}"]="${VALUE}"
done < <(readConfigMap "synoinfo" "${USER_CONFIG_FILE}")
while IFS=': ' read -r KEY VALUE; do
[ -n "${KEY}" ] && ADDONS["${KEY}"]="${VALUE}"
done < <(readConfigMap "addons" "${USER_CONFIG_FILE}")
# Read modules from user config
while IFS=': ' read -r KEY VALUE; do
[ -n "${KEY}" ] && MODULES["${KEY}"]="${VALUE}"
done < <(readConfigMap "modules" "${USER_CONFIG_FILE}")
# Patches (diff -Naru OLDFILE NEWFILE > xxx.patch)
PATCHES=()
PATCHES+=("ramdisk-etc-rc-*.patch")
PATCHES+=("ramdisk-init-script-*.patch")
PATCHES+=("ramdisk-post-init-script-*.patch")
PATCHES+=("ramdisk-disable-root-pwd-*.patch")
PATCHES+=("ramdisk-disable-disabled-ports-*.patch")
for PE in ${PATCHES[@]}; do
RET=1
echo "Patching with ${PE}" >"${LOG_FILE}"
for PF in $(ls ${PATCH_PATH}/${PE} 2>/dev/null); do
echo "Patching with ${PF}" >>"${LOG_FILE}"
(
cd "${RAMDISK_PATH}"
patch -p1 -i "${PF}" >>"${LOG_FILE}" 2>&1 # busybox patch and gun patch have different processing methods and parameters.
)
RET=$?
[ ${RET} -eq 0 ] && break
done
[ ${RET} -ne 0 ] && exit 1
done
# Add serial number to synoinfo.conf, to help to recovery a installed DSM
echo "Set synoinfo SN" >"${LOG_FILE}"
_set_conf_kv "SN" "${SN}" "${RAMDISK_PATH}/etc/synoinfo.conf" >>"${LOG_FILE}" 2>&1 || exit 1
_set_conf_kv "SN" "${SN}" "${RAMDISK_PATH}/etc.defaults/synoinfo.conf" >>"${LOG_FILE}" 2>&1 || exit 1
for KEY in ${!SYNOINFO[@]}; do
echo "Set synoinfo ${KEY}" >>"${LOG_FILE}"
_set_conf_kv "${KEY}" "${SYNOINFO[${KEY}]}" "${RAMDISK_PATH}/etc/synoinfo.conf" >>"${LOG_FILE}" 2>&1 || exit 1
_set_conf_kv "${KEY}" "${SYNOINFO[${KEY}]}" "${RAMDISK_PATH}/etc.defaults/synoinfo.conf" >>"${LOG_FILE}" 2>&1 || exit 1
done
# Patch /sbin/init.post
grep -v -e '^[\t ]*#' -e '^$' "${PATCH_PATH}/config-manipulators.sh" >"${TMP_PATH}/rp.txt"
sed -e "/@@@CONFIG-MANIPULATORS-TOOLS@@@/ {" -e "r ${TMP_PATH}/rp.txt" -e 'd' -e '}' -i "${RAMDISK_PATH}/sbin/init.post"
rm -f "${TMP_PATH}/rp.txt"
touch "${TMP_PATH}/rp.txt"
echo "_set_conf_kv 'SN' '${SN}' '/tmpRoot/etc/synoinfo.conf'" >>"${TMP_PATH}/rp.txt"
echo "_set_conf_kv 'SN' '${SN}' '/tmpRoot/etc.defaults/synoinfo.conf'" >>"${TMP_PATH}/rp.txt"
for KEY in ${!SYNOINFO[@]}; do
echo "_set_conf_kv '${KEY}' '${SYNOINFO[${KEY}]}' '/tmpRoot/etc/synoinfo.conf'" >>"${TMP_PATH}/rp.txt"
echo "_set_conf_kv '${KEY}' '${SYNOINFO[${KEY}]}' '/tmpRoot/etc.defaults/synoinfo.conf'" >>"${TMP_PATH}/rp.txt"
done
sed -e "/@@@CONFIG-GENERATED@@@/ {" -e "r ${TMP_PATH}/rp.txt" -e 'd' -e '}' -i "${RAMDISK_PATH}/sbin/init.post"
rm -f "${TMP_PATH}/rp.txt"
# Extract Modules to Ramdisk
installModules "${PLATFORM}" "${KVERP}" "${!MODULES[@]}" || exit 1
# Copying fake modprobe
[ $(echo "${KVER:-4}" | cut -d'.' -f1) -lt 5 ] && cp -f "${PATCH_PATH}/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
# Copying LKM to /usr/lib/modules
gzip -dc "${LKMS_PATH}/rp-${PLATFORM}-${KVERP}-${LKM}.ko.gz" >"${RAMDISK_PATH}/usr/lib/modules/rp.ko" 2>"${LOG_FILE}" || exit 1
# Addons
echo "Create addons.sh" >"${LOG_FILE}"
mkdir -p "${RAMDISK_PATH}/addons"
echo "#!/bin/sh" >"${RAMDISK_PATH}/addons/addons.sh"
echo 'echo "addons.sh called with params ${@}"' >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export LOADERLABEL=\"ARC\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export LOADERVERSION=\"${ARC_VERSION}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export LOADERBUILD=\"${ARC_BUILD}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export LOADERBRANCH=\"${ARCBRANCH}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export PLATFORM=\"${PLATFORM}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export PRODUCTVER=\"${PRODUCTVER}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export MODEL=\"${MODEL}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export MODELID=\"${MODELID}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export MLINK=\"${PAT_URL}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export MCHECKSUM=\"${PAT_HASH}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export LAYOUT=\"${LAYOUT}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "export KEYMAP=\"${KEYMAP}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
chmod +x "${RAMDISK_PATH}/addons/addons.sh"
# System Addons
for ADDON in "redpill" "revert" "misc" "eudev" "disks" "localrss" "notify" "wol" "mountloader"; do
PARAMS=""
if [ "${ADDON}" == "disks" ]; then
HDDSORT="$(readConfigKey "hddsort" "${USER_CONFIG_FILE}")"
USBMOUNT="$(readConfigKey "usbmount" "${USER_CONFIG_FILE}")"
PARAMS="${HDDSORT} ${USBMOUNT}"
[ -f "${USER_UP_PATH}/${MODEL}.dts" ] && cp -f "${USER_UP_PATH}/${MODEL}.dts" "${RAMDISK_PATH}/addons/model.dts"
fi
installAddon "${ADDON}" "${PLATFORM}" || exit 1
echo "/addons/${ADDON}.sh \${1} ${PARAMS}" >>"${RAMDISK_PATH}/addons/addons.sh" 2>>"${LOG_FILE}" || exit 1
done
# User Addons
for ADDON in ${!ADDONS[@]}; do
PARAMS=${ADDONS[${ADDON}]}
installAddon "${ADDON}" "${PLATFORM}" || echo "Addon ${ADDON} not found"
echo "/addons/${ADDON}.sh \${1} ${PARAMS}" >>"${RAMDISK_PATH}/addons/addons.sh" 2>>"${LOG_FILE}" || exit 1
done
# Enable Telnet
echo "inetd" >>"${RAMDISK_PATH}/addons/addons.sh"
echo "Modify files" >"${LOG_FILE}"
# Remove function from scripts
[ "2" == "${PRODUCTVER:0:1}" ] && sed -i 's/function //g' $(find "${RAMDISK_PATH}/addons/" -type f -name "*.sh")
# Build modules dependencies
# ${ARC_PATH}/depmod -a -b ${RAMDISK_PATH} 2>/dev/null
# Copying modulelist
if [ -f "${USER_UP_PATH}/modulelist" ]; then
cp -f "${USER_UP_PATH}/modulelist" "${RAMDISK_PATH}/addons/modulelist"
else
cp -f "${ARC_PATH}/include/modulelist" "${RAMDISK_PATH}/addons/modulelist"
fi
# backup current loader configs
BACKUP_PATH="${RAMDISK_PATH}/usr/arc/backup"
rm -rf "${BACKUP_PATH}"
for F in "${USER_GRUB_CONFIG}" "${USER_CONFIG_FILE}" "${USER_UP_PATH}"; do
if [ -f "${F}" ]; then
FD="$(dirname "${F}")"
mkdir -p "${FD/\/mnt/${BACKUP_PATH}}"
cp -f "${F}" "${FD/\/mnt/${BACKUP_PATH}}"
elif [ -d "${F}" ]; then
SIZE="$(du -sm "${F}" 2>/dev/null | awk '{print $1}')"
if [ ${SIZE:-0} -gt 4 ]; then
echo "Backup of ${F} skipped, size is ${SIZE}MB" >>"${LOG_FILE}"
continue
fi
FD="$(dirname "${F}")"
mkdir -p "${FD/\/mnt/${BACKUP_PATH}}"
cp -rf "${F}" "${FD/\/mnt/${BACKUP_PATH}}"
fi
done
# Network card configuration file
for N in $(seq 0 7); do
echo -e "DEVICE=eth${N}\nBOOTPROTO=dhcp\nONBOOT=yes\nIPV6INIT=dhcp\nIPV6_ACCEPT_RA=1" >"${RAMDISK_PATH}/etc/sysconfig/network-scripts/ifcfg-eth${N}"
done
# SA6400 patches
if [ "${PLATFORM}" == "epyc7002" ]; then
echo -n " - Apply Epyc7002 Fixes"
sed -i 's#/dev/console#/var/log/lrc#g' ${RAMDISK_PATH}/usr/bin/busybox
sed -i '/^echo "START/a \\nmknod -m 0666 /dev/console c 1 3' ${RAMDISK_PATH}/linuxrc.syno
fi
# Broadwellntbap patches
if [ "${PLATFORM}" == "broadwellntbap" ]; then
echo -n " - Apply Broadwellntbap Fixes"
sed -i 's/IsUCOrXA="yes"/XIsUCOrXA="yes"/g; s/IsUCOrXA=yes/XIsUCOrXA=yes/g' ${RAMDISK_PATH}/usr/syno/share/environments.sh
fi
# Call user patch scripts
for F in $(ls -1 ${USER_UP_PATH}/*.sh 2>/dev/null); do
echo "Calling ${F}" >"${LOG_FILE}"
. "${F}" >>"${LOG_FILE}" 2>&1 || exit 1
done
# Reassembly ramdisk
if [ "${RD_COMPRESSED}" == "true" ]; then
(cd "${RAMDISK_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | xz -9 --format=lzma >"${MOD_RDGZ_FILE}") >"${LOG_FILE}" 2>&1 || exit 1
else
(cd "${RAMDISK_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root >"${MOD_RDGZ_FILE}") >"${LOG_FILE}" 2>&1 || exit 1
fi
sync
# Clean
rm -rf "${RAMDISK_PATH}"

View File

@@ -0,0 +1,82 @@
#!/usr/bin/env bash
# Based on code and ideas from @jumkey
[[ -z "${ARC_PATH}" || ! -d "${ARC_PATH}/include" ]] && ARC_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"
. ${ARC_PATH}/include/functions.sh
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
# Adapted from: scripts/Makefile.lib
# Usage: size_append FILE [FILE2] [FILEn]...
# Output: LE HEX with size of file in bytes (to STDOUT)
file_size_le() {
printf $(
dec_size=0
for F in "${@}"; do
fsize=$(stat -c "%s" ${F})
dec_size=$((${dec_size} + ${fsize}))
done
printf "%08x\n" ${dec_size} |
sed 's/\(..\)/\1 /g' | {
read ch0 ch1 ch2 ch3
for ch in ${ch3} ${ch2} ${ch1} ${ch0}; do
printf '%s%03o' '\' $((0x${ch}))
done
}
)
}
size_le() {
printf $(
printf "%08x\n" "${@}" |
sed 's/\(..\)/\1 /g' | {
read ch0 ch1 ch2 ch3
for ch in ${ch3} ${ch2} ${ch1} ${ch0}; do
printf '%s%03o' '\' $((0x${ch}))
done
}
)
}
VMLINUX_MOD=${1}
ZIMAGE_MOD=${2}
KVER_MAJOR=${KVER:0:1}
if [ ${KVER_MAJOR} -eq 4 ]; then
# Kernel version 4.x or 3.x (bromolow)
#zImage_head 16494
#payload(
# vmlinux.bin x
# padding 0xf00000-x
# vmlinux.bin size 4
#) 0xf00004
#zImage_tail(
# unknown 72
# run_size 4
# unknown 30
# vmlinux.bin size 4
# unknown 114460
#) 114570
#crc32 4
gzip -dc "${ARC_PATH}/bzImage-template-v4.gz" >"${ZIMAGE_MOD}" || exit 1
dd if="${VMLINUX_MOD}" of="${ZIMAGE_MOD}" bs=16494 seek=1 conv=notrunc || exit 1
file_size_le "${VMLINUX_MOD}" | dd of="${ZIMAGE_MOD}" bs=15745134 seek=1 conv=notrunc || exit 1
file_size_le "${VMLINUX_MOD}" | dd of="${ZIMAGE_MOD}" bs=15745244 seek=1 conv=notrunc || exit 1
RUN_SIZE=$(objdump -h ${VMLINUX_MOD} | sh "${ARC_PATH}/calc_run_size.sh")
size_le ${RUN_SIZE} | dd of=${ZIMAGE_MOD} bs=15745210 seek=1 conv=notrunc|| exit 1
size_le $(($((16#$(crc32 "${ZIMAGE_MOD}" | awk '{print $1}'))) ^ 0xFFFFFFFF)) | dd of="${ZIMAGE_MOD}" conv=notrunc oflag=append || exit 1
else
# Kernel version 5.x
gzip -dc "${ARC_PATH}/bzImage-template-v5.gz" >"${ZIMAGE_MOD}" || exit 1
dd if="${VMLINUX_MOD}" of="${ZIMAGE_MOD}" bs=14561 seek=1 conv=notrunc || exit 1
file_size_le "${VMLINUX_MOD}" | dd of="${ZIMAGE_MOD}" bs=34463421 seek=1 conv=notrunc || exit 1
file_size_le "${VMLINUX_MOD}" | dd of="${ZIMAGE_MOD}" bs=34479132 seek=1 conv=notrunc || exit 1
# RUN_SIZE=$(objdump -h ${VMLINUX_MOD} | sh "${ARC_PATH}/calc_run_size.sh")
# size_le ${RUN_SIZE} | dd of=${ZIMAGE_MOD} bs=34626904 seek=1 conv=notrunc || exit 1
size_le $(($((16#$(crc32 "${ZIMAGE_MOD}" | awk '{print $1}'))) ^ 0xFFFFFFFF)) | dd of="${ZIMAGE_MOD}" conv=notrunc oflag=append || exit 1
fi

View File

@@ -0,0 +1,33 @@
#!/usr/bin/env bash
[[ -z "${ARC_PATH}" || ! -d "${ARC_PATH}/include" ]] && ARC_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"
. ${ARC_PATH}/include/functions.sh
set -o pipefail # Get exit code from process piped
# Sanity check
[ -f "${ORI_ZIMAGE_FILE}" ] || (die "${ORI_ZIMAGE_FILE} not found!" | tee -a "${LOG_FILE}")
rm -f "${MOD_ZIMAGE_FILE}"
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
if [ "${KERNEL}" == "custom" ]; then
echo -n " - Using customized Kernel"
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
# Modify KVER for Epyc7002
[ "${PLATFORM}" == "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
# Extract bzImage
gzip -dc "${CUSTOM_PATH}/bzImage-${PLATFORM}-${KVERP}.gz" >"${MOD_ZIMAGE_FILE}"
else
# Extract vmlinux
${ARC_PATH}/bzImage-to-vmlinux.sh "${ORI_ZIMAGE_FILE}" "${TMP_PATH}/vmlinux" >"${LOG_FILE}" 2>&1 || dieLog
# Patch boot params and ramdisk check
${ARC_PATH}/kpatch "${TMP_PATH}/vmlinux" "${TMP_PATH}/vmlinux-mod" >"${LOG_FILE}" 2>&1 || dieLog
# rebuild zImage
${ARC_PATH}/vmlinux-to-bzImage.sh "${TMP_PATH}/vmlinux-mod" "${MOD_ZIMAGE_FILE}" >"${LOG_FILE}" 2>&1 || dieLog
fi
sync

1
files/p1/ARC-VERSION Normal file
View File

@@ -0,0 +1 @@
23.1.1

View File

@@ -0,0 +1,19 @@
serial --unit=1 --speed=115200
terminal serial
default 1
timeout 3
verbose
hiddenmenu
fallback 0
title SYNOLOGY_1
root (hd0,0)
kernel /zImage root=/dev/md0
initrd /rd.gz
title SYNOLOGY_2
root (hd0,1)
cksum /grub_cksum.syno
vender /vender show
kernel /zImage root=/dev/md0
initrd /rd.gz

View File

200
files/p1/boot/grub/grub.cfg Normal file
View File

@@ -0,0 +1,200 @@
insmod search
insmod echo
insmod terminal
insmod test
insmod font
insmod loadenv
insmod serial
insmod usb_keyboard
insmod linux
insmod gzio
insmod fat
insmod ext2
insmod ata
insmod btrfs
insmod ntfs
insmod part_msdos
insmod part_gpt
set default="boot"
set timeout="5"
set timeout_style="menu"
set vesa_mode=1
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ]; then
set default="${next_entry}"
unset next_entry
save_env next_entry
fi
if [ "${vesa_mode}" ]; then
set vesa_mode=${vesa_mode}
fi
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
load_video
if loadfont unicode; then
insmod gfxterm
set gfxmode=1024x768
set gfxpayload=auto
terminal_output gfxterm
insmod gfxmenu
loadfont ${prefix}/theme/dejavu_bold_14.pf2
loadfont ${prefix}/theme/dejavu_mono_12.pf2
insmod png
set theme=${prefix}/theme/theme.txt
export theme
fi
if serial --unit=0 --speed=115200; then
terminal_input --append serial_com0
terminal_output --append serial_com0
fi
function set_gfxpayload {
if [ ${vesa_mode} -eq 1 ]; then
set gfxpayload=keep
else
set gfxpayload=text
fi
}
set menu_color_normal=white/black
set menu_color_highlight=white/red
set color_normal=white/black
set ARC_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait net.ifnames=0 panic=5 split_lock_detect=off pcie_aspm=off intel_pstate=disable"
search --set=root --label "ARC3"
if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
if [ "${default}" = "direct" ]; then
set timeout="1"
menuentry 'DSM Direct Mode' --id direct {
set_gfxpayload
echo "Loading DSM Kernel..."
linux /zImage-dsm ${dsm_cmdline}
echo "Loading DSM Initramfs..."
initrd /initrd-dsm
echo "Booting..."
echo "Access http://find.synology.com/ to connect the DSM via web."
}
fi
menuentry 'Arc DSM Mode' --id boot {
set_gfxpayload
echo "Loading Arc Kernel..."
linux /bzImage-arc ${ARC_CMDLINE} ${arc_cmdline}
echo "Loading Arc Initramfs..."
if [ -e /initrd-user ]; then
initrd /initrd-arc /initrd-user
else
initrd /initrd-arc
fi
echo "Booting..."
}
fi
if [ -e /automated ]; then
menuentry 'Arc Automated Mode' --id automated {
set_gfxpayload
echo "Loading Arc Kernel..."
linux /bzImage-arc ${ARC_CMDLINE} ${arc_cmdline} automated_arc
echo "Loading Arc Initramfs..."
if [ -e /initrd-user ]; then
initrd /initrd-arc /initrd-user
else
initrd /initrd-arc
fi
echo "Booting..."
}
fi
menuentry 'Arc Config Mode' --id config {
set_gfxpayload
echo "Loading Arc Kernel..."
linux /bzImage-arc ${ARC_CMDLINE} ${arc_cmdline} force_arc
echo "Loading Arc Initramfs..."
if [ -e /initrd-user ]; then
initrd /initrd-arc /initrd-user
else
initrd /initrd-arc
fi
echo "Booting..."
}
if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
menuentry 'Arc Update Mode' --id update {
set_gfxpayload
echo "Loading Arc Kernel..."
linux /bzImage-arc ${ARC_CMDLINE} ${arc_cmdline} update_arc
echo "Loading Arc Initramfs..."
if [ -e /initrd-user ]; then
initrd /initrd-arc /initrd-user
else
initrd /initrd-arc
fi
echo "Booting..."
}
menuentry 'DSM Recovery Mode' --id recovery {
set_gfxpayload
echo "Loading Arc Kernel..."
linux /bzImage-arc ${ARC_CMDLINE} ${arc_cmdline} recovery
echo "Loading Arc Initramfs..."
if [ -e /initrd-user ]; then
initrd /initrd-arc /initrd-user
else
initrd /initrd-arc
fi
echo "Booting..."
}
menuentry 'DSM Reinstall Mode' --id junior {
set_gfxpayload
echo "Loading Arc Kernel..."
linux /bzImage-arc ${ARC_CMDLINE} ${arc_cmdline} force_junior
echo "Loading Arc Initramfs..."
if [ -e /initrd-user ]; then
initrd /initrd-arc /initrd-user
else
initrd /initrd-arc
fi
echo "Booting..."
}
fi
menuentry 'Enter BIOS Setup' --id bios {
fwsetup
}
menuentry 'Start Memtest86+' --id memtest {
echo "Loading memtest86+..."
linux ${prefix}/memtest
}
if [ ${vesa_mode} = 1 ]; then
menuentry 'Change Vesa to Text Output' --id videomode {
set vesa_mode=0
save_env vesa_mode
configfile ${prefix}/grub.cfg
}
else
menuentry 'Change Text to Vesa Output' --id videomode {
set vesa_mode=1
save_env vesa_mode
reboot
configfile ${prefix}/grub.cfg
}
fi

BIN
files/p1/boot/grub/memtest Executable file

Binary file not shown.

0
files/p3/addons/.gitkeep Normal file
View File

View File

0
files/p3/custom/.gitkeep Normal file
View File

BIN
files/p3/extractor/libcurl.so.4 Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
files/p3/extractor/libsodium.so Executable file

Binary file not shown.

Binary file not shown.

0
files/p3/lkms/.gitkeep Normal file
View File

View File

View File

65
img-gen-n.sh Executable file
View File

@@ -0,0 +1,65 @@
#!/usr/bin/env bash
set -e
# Clean cached Files
sudo git clean -fdx
. scripts/func.sh
# Get extractor, LKM, addons and Modules
echo "Get Dependencies"
getAddons "files/p3/addons"
getModules "files/p3/modules"
getConfigs "files/p3/configs"
getPatches "files/p3/patches"
getCustom "files/p3/custom"
getLKMs "files/p3/lkms"
getTheme "files/p1/boot/grub"
getOffline "files/p3/configs"
getBuildrootx "brx"
# Sbase
IMAGE_FILE="arc.img"
gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
echo "Mounting Image File"
sudo rm -rf "/tmp/p1"
sudo rm -rf "/tmp/p3"
mkdir -p "/tmp/p1"
mkdir -p "/tmp/p3"
sudo mount ${LOOPX}p1 "/tmp/p1"
sudo mount ${LOOPX}p3 "/tmp/p3"
[[ ! -f "brx/bzImage-arc" || ! -f "brx/initrd-arc" ]] && return 1
ARC_BUILD="`date +'%y%m%d'`"
ARC_VERSION="13.37.dev"
ARC_BRANCH="next"
echo "${ARC_BUILD}" >files/p1/ARC-BUILD
echo "${ARC_VERSION}" >files/p1/ARC-VERSION
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH
echo "Repack initrd"
cp -f "brx/bzImage-arc" "files/p3/bzImage-arc"
#cp -f "brx/initrd-arc" "files/p3/initrd-arc"
repackInitrd "brx/initrd-arc" "files/initrd" "files/p3/initrd-arc"
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}
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat arc.vmdk

65
img-gen-s.sh Executable file
View File

@@ -0,0 +1,65 @@
#!/usr/bin/env bash
set -e
# Clean cached Files
sudo git clean -fdx
. scripts/func.sh
# Get extractor, LKM, addons and Modules
echo "Get Dependencies"
getAddons "files/p3/addons"
getModules "files/p3/modules"
getConfigs "files/p3/configs"
getPatches "files/p3/patches"
getCustom "files/p3/custom"
getLKMs "files/p3/lkms"
getTheme "files/p1/boot/grub"
getOffline "files/p3/configs"
getBuildroots "brs"
# Sbase
IMAGE_FILE="arc.img"
gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
echo "Mounting Image File"
sudo rm -rf "/tmp/p1"
sudo rm -rf "/tmp/p3"
mkdir -p "/tmp/p1"
mkdir -p "/tmp/p3"
sudo mount ${LOOPX}p1 "/tmp/p1"
sudo mount ${LOOPX}p3 "/tmp/p3"
[[ ! -f "brs/bzImage-arc" || ! -f "brs/initrd-arc" ]] && return 1
ARC_BUILD="`date +'%y%m%d'`"
ARC_VERSION="13.37.dev"
ARC_BRANCH="stable"
echo "${ARC_BUILD}" >files/p1/ARC-BUILD
echo "${ARC_VERSION}" >files/p1/ARC-VERSION
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH
echo "Repack initrd"
cp -f "brs/bzImage-arc" "files/p3/bzImage-arc"
#cp -f "brs/initrd-arc" "files/p3/initrd-arc"
repackInitrd "brs/initrd-arc" "files/initrd" "files/p3/initrd-arc"
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}
qemu-img convert ${IMAGE_FILE} -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat arc.vmdk

12
kpatch/Makefile Normal file
View File

@@ -0,0 +1,12 @@
CFLAGS = -Wall -pedantic
LDFLAGS =
LIBS = /lib/x86_64-linux-gnu/libelf.a /lib/x86_64-linux-gnu/libz.a
all: kpatch
kpatch: main.o
cc $(LDFLAGS) -o $@ $^ $(LIBS)
clean:
rm -f kpatch *.o

BIN
kpatch/kpatch Executable file

Binary file not shown.

492
kpatch/main.c Normal file
View File

@@ -0,0 +1,492 @@
/*
* Copyright (c) 2022 Fabio Belavenuto <belavenuto@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
/**
* Converted from php code by Fabio Belavenuto <belavenuto@gmail.com>
*
* A quick tool for patching the boot_params check in the DSM kernel image
* This lets you tinker with the initial ramdisk contents without disabling mount() features and modules loading
*
* The overall pattern we need to find is:
* - an CDECL function
* - does "LOCK OR [const-ptr],n" 4x
* - values of ORs are 1/2/4/8 respectively
* - [const-ptr] is always the same
*
* Added patch for CMOS_WRITE by Fabio Belavenuto
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <getopt.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdarg.h>
#include <gelf.h>
const int DIR_FWD = 1;
const int DIR_RWD = -1;
/* Variables */
int fd, verbose = 1, read_only = 0;
Elf *elfHandle;
GElf_Ehdr elfExecHeader;
uint64_t orPos[4], fileSize, rodataAddr, rodataOffs, initTextOffs;
unsigned char *fileData;
/*****************************************************************************/
void errorMsg(char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
fprintf(stderr, "\n");
exit(1);
}
/*****************************************************************************/
void errorNum()
{
char str[100] = {0};
perror(str);
exit(2);
}
/*****************************************************************************/
void elfErrno()
{
int err;
if ((err = elf_errno()) != 0)
{
fprintf(stderr, "%s\n", elf_errmsg(err));
exit(3);
}
}
/*****************************************************************************/
// Finding a function boundary is non-trivial really as patters can vary, we can have multiple exit points, and in CISC
// there are many things which may match e.g. "PUSH EBP". Implementing even a rough disassembler is pointless.
// However, we can certainly cheat here as we know with CDECL a non-empty function will always contain one or more
// PUSH (0x41) R12-R15 (0x54-57) sequences. Then we can search like a 1K forward for these characteristic LOCK OR.
uint64_t findPUSH_R12_R15_SEQ(uint64_t start)
{
uint64_t i;
for (i = start; i < fileSize; i++)
{
if (fileData[i] == 0x41 && (fileData[i + 1] >= 0x54 && fileData[i + 1] <= 0x57))
{
return i;
}
}
return -1;
}
/*****************************************************************************/
//[0xF0, 0x80, null, null, null, null, null, 0xXX],
uint64_t findORs(uint64_t start, uint32_t maxCheck)
{
uint64_t i;
int c = 0;
uint8_t lb = 0x01;
for (i = start; i < fileSize; i++)
{
if (fileData[i] == 0xF0 && fileData[i + 1] == 0x80 && fileData[i + 7] == lb)
{
orPos[c++] = i;
i += 7;
lb <<= 1;
}
if (c == 4)
{
break;
}
if (--maxCheck == 0)
{
break;
}
}
return c;
}
/*****************************************************************************/
void patchBootParams()
{
uint64_t addr, pos;
uint64_t newPtrOffset, ptrOffset;
int n;
printf("Patching boot params.\n");
// The function will reside in init code part. We don't care we may potentially search beyond as we expect it to be found
while (initTextOffs < fileSize)
{
addr = findPUSH_R12_R15_SEQ(initTextOffs);
if (addr == -1)
break; // no more "functions" left
printf("\rAnalyzing f() candidate @ %lX, PUSH @ %lX", initTextOffs, addr);
// we found something looking like PUSH R12-R15, now find the ORs
n = findORs(initTextOffs, 1024);
if (n != 4)
{
// We can always move forward by the function token length (obvious) but if we couldn't find any LOCK-OR tokens
// we can skip the whole look ahead distance. We CANNOT do that if we found even a single token because the next one
// might have been just after the look ahead distance
initTextOffs += 2;
if (n == 0)
{
initTextOffs += 1024;
}
continue; // Continue the main search loop to find next function candidate
}
// We found LOCK(); OR ptr sequences so we can print some logs and collect ptrs (as this is quite expensive)
printf("\n[?] Found possible f() @ %lX\n", initTextOffs);
ptrOffset = 0;
int ec = 0;
for (n = 0; n < 4; n++)
{
// data will have the following bytes:
// [0-LOCK()] [1-OR()] [2-BYTE-PTR] [3-OFFS-b3] [4-OFFS-b2] [5-OFFS-b1] [6-OFFS-b1] [7-NUMBER]
pos = orPos[n];
// how far it "jumps"
newPtrOffset = pos + (fileData[pos + 6] << 24 | fileData[pos + 5] << 16 | fileData[pos + 4] << 8 | fileData[pos + 3]);
if (ptrOffset == 0)
{
ptrOffset = newPtrOffset;
++ec;
}
else if (ptrOffset == newPtrOffset)
{
++ec;
}
printf("\t[+] Found LOCK-OR#%d sequence @ %lX => %02X %02X %02X %02X %02X %02X %02X %02X [RIP+%lX]\n",
n, pos, fileData[pos], fileData[pos + 1], fileData[pos + 2], fileData[pos + 3], fileData[pos + 4],
fileData[pos + 5], fileData[pos + 6], fileData[pos + 7], newPtrOffset);
}
if (ec != 4)
{
printf("\t[-] LOCK-OR PTR offset mismatch - %d/4 matched\n", ec);
// If the pointer checking failed we can at least move beyond the last LOCK-OR found as we know there's no valid
// sequence of LOCK-ORs there
initTextOffs = orPos[3];
continue;
}
printf("\t[+] All %d LOCK-OR PTR offsets equal - match found!\n", ec);
break;
}
if (addr == -1)
{
errorMsg("\nFailed to find matching sequences\n");
}
else
{
// Patch offsets
for (n = 0; n < 4; n++)
{
// The offset will point at LOCK(), we need to change the OR (0x80 0x0d) to AND (0x80 0x25) so the two bytes after
pos = orPos[n] + 2;
printf("Patching OR to AND @ %lX\n", pos);
fileData[pos] = 0x25;
}
}
}
/*****************************************************************************/
uint32_t changeEndian(uint32_t num)
{
return ((num >> 24) & 0xff) | // move byte 3 to byte 0
((num << 8) & 0xff0000) | // move byte 1 to byte 2
((num >> 8) & 0xff00) | // move byte 2 to byte 1
((num << 24) & 0xff000000); // move byte 0 to byte 3
}
/*****************************************************************************/
uint64_t findSeq(const char *seq, int len, uint32_t pos, int dir, uint64_t max)
{
uint64_t i = pos;
do
{
if (memcmp((const char *)fileData + i, seq, len) == 0)
{
return i;
}
i += dir;
--max;
} while (i > 0 && i < fileSize && max > 0);
return -1;
}
/*****************************************************************************/
void patchRamdiskCheck()
{
uint64_t pos, errPrintAddr;
uint64_t printkPos, testPos, jzPos;
const char str[] = "3ramdisk corrupt";
printf("Patching ramdisk check.\n");
for (pos = rodataOffs; pos < fileSize; pos++)
{
if (memcmp(str, (const char *)(fileData + pos), 16) == 0)
{
pos -= rodataOffs;
break;
}
}
errPrintAddr = rodataAddr + pos - 1;
printf("LE arg addr: %08lX\n", errPrintAddr);
printkPos = findSeq((const char *)&errPrintAddr, 4, 0, DIR_FWD, -1);
if (printkPos == -1)
{
errorMsg("printk pos not found!\n");
}
// double check if it's a MOV reg,VAL (where reg is EAX/ECX/EDX/EBX/ESP/EBP/ESI/EDI)
printkPos -= 3;
if (memcmp((const char *)fileData + printkPos, "\x48\xc7", 2) != 0)
{
errorMsg("Expected MOV=>reg before printk error, got %02X %02X\n", fileData[printkPos], fileData[printkPos + 1]);
}
if (fileData[printkPos + 2] < 0xC0 || fileData[printkPos + 2] > 0xC7)
{
errorMsg("Expected MOV w/reg operand [C0-C7], got %02X\n", fileData[printkPos + 2]);
}
printf("Found printk MOV @ %08lX\n", printkPos);
// now we should seek a reasonable amount (say, up to 32 bytes) for a sequence of CALL x => TEST EAX,EAX => JZ
testPos = findSeq("\x85\xc0", 2, printkPos, DIR_RWD, 32);
if (testPos == -1)
{
errorMsg("Failed to find TEST eax,eax\n");
}
printf("Found TEST eax,eax @ %08lX\n", testPos);
jzPos = testPos + 2;
if (fileData[jzPos] != 0x74)
{
errorMsg("Failed to find JZ\n");
}
printf("OK - patching %02X%02X (JZ) to %02X%02X (JMP) @ %08lX\n",
fileData[jzPos], fileData[jzPos + 1], 0xEB, fileData[jzPos + 1], jzPos);
fileData[jzPos] = 0xEB;
}
/*****************************************************************************/
void patchCmosWrite()
{
uint64_t pos, errPrintAddr;
uint64_t pr_errPos, testPos, callPos;
const char str[] = "3smpboot: %s: this boot have memory training";
printf("Patching call to rtc_cmos_write.\n");
for (pos = rodataOffs; pos < fileSize; pos++)
{
if (memcmp(str, (const char *)(fileData + pos), 16) == 0)
{
pos -= rodataOffs;
break;
}
}
errPrintAddr = rodataAddr + pos - 1;
printf("LE arg addr: %08lX\n", errPrintAddr);
pr_errPos = findSeq((const char *)&errPrintAddr, 4, 0, DIR_FWD, -1);
if (pr_errPos == -1)
{
printf("pr_err pos not found - ignoring.\n"); // Some kernels do not have the call, exit without error
return;
}
// double check if it's a MOV reg,VAL (where reg is EAX/ECX/EDX/EBX/ESP/EBP/ESI/EDI)
pr_errPos -= 3;
if (memcmp((const char *)fileData + pr_errPos, "\x48\xc7", 2) != 0)
{
errorMsg("Expected MOV=>reg before pr_err error, got %02X %02X\n", fileData[pr_errPos], fileData[pr_errPos + 1]);
}
if (fileData[pr_errPos + 2] < 0xC0 || fileData[pr_errPos + 2] > 0xC7)
{
errorMsg("Expected MOV w/reg operand [C0-C7], got %02X\n", fileData[pr_errPos + 2]);
}
printf("Found pr_err MOV @ %08lX\n", pr_errPos);
// now we should seek a reasonable amount (say, up to 64 bytes) for a sequence of
// MOV ESI, 0x48 => MOV EDI, 0xFF => MOV EBX, EAX
testPos = findSeq("\xBE\x48\x00\x00\x00\xBF\xFF\x00\x00\x00\x89\xC3", 12, pr_errPos, DIR_RWD, 64);
if (testPos == -1)
{
printf("Failed to find MOV ESI, 0x48 => MOV EDI, 0xFF => MOV EBX, EAX\n");
return;
}
printf("Found MOV ESI, 0x48 => MOV EDI, 0xFF => MOV EBX, EAX @ %08lX\n", testPos);
callPos = testPos + 12;
if (fileData[callPos] != 0xE8)
{
errorMsg("Failed to find CALL\n");
}
printf("OK - patching %02X (CALL) to 0x90.. (NOPs) @ %08lX\n",
fileData[callPos], callPos);
for (uint64_t i = 0; i < 5; i++)
fileData[callPos + i] = 0x90;
}
/*****************************************************************************/
int main(int argc, char *argv[])
{
struct stat fileInf;
Elf_Scn *section;
GElf_Shdr sectionHeader;
char *sectionName;
char *fileIn = NULL, *fileOut = NULL;
int onlyBoot = 0, onlyRD = 0, onlyCMOS = 0, c;
if (argc < 3)
{
errorMsg("Use: kpatch (option) <vmlinux> <output>\nOptions:\n -b Only bootparams\n -r Only ramdisk\n -c Only CMOS");
}
c = 1;
while (c < argc)
{
if (strcmp(argv[c], "-b") == 0)
{
onlyBoot = 1;
}
else if (strcmp(argv[c], "-r") == 0)
{
onlyRD = 1;
}
else if (strcmp(argv[c], "-c") == 0)
{
onlyCMOS = 1;
}
else if (fileIn == NULL)
{
fileIn = argv[c];
}
else
{
fileOut = argv[c];
break;
}
++c;
}
if (NULL == fileIn)
{
errorMsg("Please give a input filename");
}
if (NULL == fileOut)
{
errorMsg("Please give a output filename");
}
if (elf_version(EV_CURRENT) == EV_NONE)
elfErrno();
if ((fd = open(fileIn, O_RDONLY)) == -1)
errorNum();
if ((elfHandle = elf_begin(fd, ELF_C_READ, NULL)) == NULL)
elfErrno();
if (gelf_getehdr(elfHandle, &elfExecHeader) == NULL)
elfErrno();
switch (elf_kind(elfHandle))
{
case ELF_K_NUM:
case ELF_K_NONE:
errorMsg("file type unknown\n");
break;
case ELF_K_COFF:
errorMsg("COFF binaries not supported\n");
break;
case ELF_K_AR:
errorMsg("AR archives not supported\n");
break;
case ELF_K_ELF:
break;
}
section = NULL;
while ((section = elf_nextscn(elfHandle, section)) != NULL)
{
if (gelf_getshdr(section, &sectionHeader) != &sectionHeader)
elfErrno();
if ((sectionName = elf_strptr(elfHandle, elfExecHeader.e_shstrndx, sectionHeader.sh_name)) == NULL)
elfErrno();
if (strcmp(sectionName, ".init.text") == 0)
{
initTextOffs = sectionHeader.sh_offset;
}
else if (strcmp(sectionName, ".rodata") == 0)
{
rodataAddr = sectionHeader.sh_addr & 0xFFFFFFFF;
rodataOffs = sectionHeader.sh_offset;
}
}
elfErrno(); /* If there isn't elf_errno set, nothing will happend. */
elf_end(elfHandle);
if (fstat(fd, &fileInf) == -1)
errorNum();
fileSize = fileInf.st_size;
fileData = malloc(fileSize);
if (fileSize != read(fd, fileData, fileSize))
{
errorNum();
}
close(fd);
printf("Found .init.text offset @ %lX\n", initTextOffs);
printf("Found .rodata address @ %lX\n", rodataAddr);
printf("Found .rodata offset @ %lX\n", rodataOffs);
if (onlyBoot == 0 && onlyCMOS == 0 && onlyRD == 0)
{
patchBootParams();
patchRamdiskCheck();
patchCmosWrite();
}
else
{
if (onlyBoot == 1)
{
patchBootParams();
}
if (onlyRD == 1)
{
patchRamdiskCheck();
}
if (onlyCMOS == 1)
{
patchCmosWrite();
}
}
if ((fd = open(fileOut, O_WRONLY | O_CREAT, 0644)) == -1)
{
errorNum();
}
if (fileSize != write(fd, fileData, fileSize))
{
errorNum();
}
close(fd);
printf("Finish!\n");
return 0;
}

426
scripts/func.sh Executable file
View File

@@ -0,0 +1,426 @@
#!/usr/bin/env bash
#
# Copyright (C) 2024 AuxXxilium <https://github.com/AuxXxilium>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# Get latest Arc
# $1 path
function getArcSystem() {
echo "Getting ArcSystem begin"
local DEST_PATH="${1}"
local RELEASE="${2}"
local CACHE_FILE="/tmp/system.zip"
rm -f "${CACHE_FILE}"
if [ "${RELEASE}" = "dev" ]; then
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-system/releases" | jq -r ".[].tag_name" | grep "dev" | sort -rV | head -1)"
else
local TAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-system/releases" | jq -r ".[].tag_name" | grep -v "dev" | sort -rV | head -1)"
fi
if curl -skL "https://github.com/AuxXxilium/arc-system/releases/download/${TAG}/system-${TAG}.zip" -o "${CACHE_FILE}"; then
# Unzip LKMs
mkdir -p "${DEST_PATH}"
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
rm -f "${CACHE_FILE}"
echo "Getting ArcSystem end - ${TAG}"
else
echo "Failed to get ArcSystem"
exit 1
fi
}
# Get latest LKMs
# $1 path
function getLKMs() {
echo "Getting LKMs begin"
local DEST_PATH="${1}"
local CACHE_FILE="/tmp/rp-lkms.zip"
rm -f "${CACHE_FILE}"
TAG="$(curl -s "https://api.github.com/repos/AuxXxilium/arc-lkm/releases/latest" | grep -oP '"tag_name": "\K(.*)(?=")')"
export LKMTAG="${TAG}"
if curl -skL "https://github.com/AuxXxilium/arc-lkm/releases/download/${TAG}/rp-lkms.zip" -o "${CACHE_FILE}"; then
# Unzip LKMs
rm -rf "${DEST_PATH}"
mkdir -p "${DEST_PATH}"
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
rm -f "${CACHE_FILE}"
echo "Getting LKMs end - ${TAG}"
else
echo "Failed to get LKMs"
exit 1
fi
}
# Get latest Addons
# $1 path
function getAddons() {
echo "Getting Addons begin"
local DEST_PATH="${1}"
local CACHE_DIR="/tmp/addons"
local CACHE_FILE="/tmp/addons.zip"
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-addons/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
export ADDONTAG="${TAG}"
if curl -skL "https://github.com/AuxXxilium/arc-addons/releases/download/${TAG}/addons-${TAG}.zip" -o "${CACHE_FILE}"; then
# Unzip Addons
rm -rf "${CACHE_DIR}"
mkdir -p "${CACHE_DIR}"
mkdir -p "${DEST_PATH}"
unzip -o "${CACHE_FILE}" -d "${CACHE_DIR}"
echo "Installing Addons to ${DEST_PATH}"
[ -f /tmp/addons/VERSION ] && cp -f /tmp/addons/VERSION ${DEST_PATH}/
for PKG in $(ls ${CACHE_DIR}/*.addon); do
ADDON=$(basename "${PKG}" .addon)
mkdir -p "${DEST_PATH}/${ADDON}"
echo "Extracting ${PKG} to ${DEST_PATH}/${ADDON}"
tar -xaf "${PKG}" -C "${DEST_PATH}/${ADDON}"
done
rm -f "${CACHE_FILE}"
echo "Getting Addons end - ${TAG}"
else
echo "Failed to get Addons"
exit 1
fi
}
# Get latest Modules
# $1 path
function getModules() {
echo "Getting Modules begin"
local DEST_PATH="${1}"
local CACHE_FILE="/tmp/modules.zip"
rm -f "${CACHE_FILE}"
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-modules/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
export MODULETAG="${TAG}"
if curl -skL "https://github.com/AuxXxilium/arc-modules/releases/download/${TAG}/modules-${TAG}.zip" -o "${CACHE_FILE}"; then
# Unzip Modules
rm -rf "${DEST_PATH}"
mkdir -p "${DEST_PATH}"
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
echo "Getting Modules end - ${TAG}"
else
echo "Failed to get Modules"
exit 1
fi
}
# Get latest Configs
# $1 path
function getConfigs() {
echo "Getting Configs begin"
local DEST_PATH="${1}"
local CACHE_FILE="/tmp/configs.zip"
rm -f "${CACHE_FILE}"
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-configs/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
export CONFIGTAG="${TAG}"
if curl -skL "https://github.com/AuxXxilium/arc-configs/releases/download/${TAG}/configs-${TAG}.zip" -o "${CACHE_FILE}"; then
# Unzip Configs
rm -rf "${DEST_PATH}"
mkdir -p "${DEST_PATH}"
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
rm -f "${CACHE_FILE}"
echo "Getting Configs end - ${TAG}"
else
echo "Failed to get Configs"
exit 1
fi
}
# Get latest Patches
# $1 path
function getPatches() {
echo "Getting Patches begin"
local DEST_PATH="${1}"
local CACHE_FILE="/tmp/patches.zip"
rm -f "${CACHE_FILE}"
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-patches/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
export PATCHTAG="${TAG}"
if curl -skL "https://github.com/AuxXxilium/arc-patches/releases/download/${TAG}/patches-${TAG}.zip" -o "${CACHE_FILE}"; then
# Unzip Patches
rm -rf "${DEST_PATH}"
mkdir -p "${DEST_PATH}"
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
rm -f "${CACHE_FILE}"
echo "Getting Patches end - ${TAG}"
else
echo "Failed to get Patches"
exit 1
fi
}
# Get latest Custom
# $1 path
function getCustom() {
echo "Getting Custom begin"
local DEST_PATH="${1}"
local CACHE_FILE="/tmp/custom.zip"
rm -f "${CACHE_FILE}"
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-custom/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
export CUSTOMTAG="${TAG}"
if curl -skL "https://github.com/AuxXxilium/arc-custom/releases/download/${TAG}/custom-${TAG}.zip" -o "${CACHE_FILE}"; then
# Unzip Custom
rm -rf "${DEST_PATH}"
mkdir -p "${DEST_PATH}"
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
rm -f "${CACHE_FILE}"
echo "Getting Custom end - ${TAG}"
else
echo "Failed to get Custom"
exit 1
fi
}
# Get latest Theme
# $1 path
function getTheme() {
echo "Getting Theme begin"
local DEST_PATH="${1}"
local CACHE_FILE="/tmp/theme.zip"
rm -f "${CACHE_FILE}"
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-theme/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
export THEMETAG="${TAG}"
if curl -skL "https://github.com/AuxXxilium/arc-theme/releases/download/${TAG}/arc-theme-${TAG}.zip" -o "${CACHE_FILE}"; then
# Unzip Theme
mkdir -p "${DEST_PATH}"
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
rm -f "${CACHE_FILE}"
echo "Getting Theme end - ${TAG}"
else
echo "Failed to get Theme"
exit 1
fi
}
# Get latest Buildroot-X
# $1 path
function getBuildrootx() {
echo "Getting Buildroot-X begin"
local DEST_PATH="${1}"
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-buildroot-x/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
export BRXTAG="${TAG}"
[ ! -d "${DEST_PATH}" ] && mkdir -p "${DEST_PATH}"
echo "Getting Kernel"
rm -f "${DEST_PATH}/bzImage-arc"
if curl -skL "https://github.com/AuxXxilium/arc-buildroot-x/releases/download/${TAG}/bzImage" -o "${DEST_PATH}/bzImage-arc"; then
echo "Kernel: ${TAG}"
else
echo "Failed to get Kernel"
exit 1
fi
echo "Getting Ramdisk"
rm -f "${DEST_PATH}/initrd-arc"
if curl -skL "https://github.com/AuxXxilium/arc-buildroot-x/releases/download/${TAG}/rootfs.cpio.xz" -o "${DEST_PATH}/initrd-arc"; then
echo "Ramdisk: ${TAG}"
else
echo "Failed to get Ramdisk"
exit 1
fi
}
# Get latest Buildroot-X
# $1 path
function getBuildroots() {
echo "Getting Buildroot-S begin"
local DEST_PATH="${1}"
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-buildroot-s/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
export BRSTAG="${TAG}"
[ ! -d "${DEST_PATH}" ] && mkdir -p "${DEST_PATH}"
echo "Getting Kernel"
rm -f "${DEST_PATH}/bzImage-arc"
if curl -skL "https://github.com/AuxXxilium/arc-buildroot-s/releases/download/${TAG}/bzImage" -o "${DEST_PATH}/bzImage-arc"; then
echo "Kernel: ${TAG}"
else
echo "Failed to get Kernel"
exit 1
fi
echo "Getting Ramdisk"
rm -f "${DEST_PATH}/initrd-arc"
if curl -skL "https://github.com/AuxXxilium/arc-buildroot-s/releases/download/${TAG}/rootfs.cpio.xz" -o "${DEST_PATH}/initrd-arc"; then
echo "Ramdisk: ${TAG}"
else
echo "Failed to get Ramdisk"
exit 1
fi
}
# Get latest Offline
# $1 path
function getOffline() {
echo "Getting Offline begin"
local DEST_PATH="${1}"
[ ! -d "${DEST_PATH}" ] && mkdir -p "${DEST_PATH}"
rm -f "${DEST_PATH}/data.yml"
if curl -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/refs/heads/main/data.yml" -o "${DEST_PATH}/data.yml"; then
echo "Getting Offline end"
else
echo "Failed to get Offline"
exit 1
fi
}
# repack initrd
# $1 initrd file
# $2 plugin path
# $3 output file
function repackInitrd() {
INITRD_FILE="${1}"
PLUGIN_PATH="${2}"
OUTPUT_PATH="${3:-${INITRD_FILE}}"
[ -z "${INITRD_FILE}" ] || [ ! -f "${INITRD_FILE}" ] && exit 1
[ -z "${PLUGIN_PATH}" ] || [ ! -d "${PLUGIN_PATH}" ] && exit 1
INITRD_FILE="$(readlink -f "${INITRD_FILE}")"
PLUGIN_PATH="$(readlink -f "${PLUGIN_PATH}")"
OUTPUT_PATH="$(readlink -f "${OUTPUT_PATH}")"
RDXZ_PATH="rdxz_tmp"
mkdir -p "${RDXZ_PATH}"
(
cd "${RDXZ_PATH}"
sudo xz -dc <"${INITRD_FILE}" | sudo cpio -idm
) || true
sudo cp -rf "${PLUGIN_PATH}/"* "${RDXZ_PATH}/"
[ -f "${OUTPUT_PATH}" ] && rm -rf "${OUTPUT_PATH}"
(
cd "${RDXZ_PATH}"
sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | xz -9 --check=crc32 >"${OUTPUT_PATH}"
) || true
sudo rm -rf "${RDXZ_PATH}"
}
# resizeimg
# $1 input file
# $2 changsize MB eg: +50M -50M
# $3 output file
function resizeImg() {
INPUT_FILE="${1}"
CHANGE_SIZE="${2}"
OUTPUT_FILE="${3:-${INPUT_FILE}}"
[[ -z "${INPUT_FILE}" || ! -f "${INPUT_FILE}" ]] && exit 1
[ -z "${CHANGE_SIZE}" ] && exit 1
INPUT_FILE="$(readlink -f "${INPUT_FILE}")"
OUTPUT_FILE="$(readlink -f "${OUTPUT_FILE}")"
SIZE=$(($(du -m "${INPUT_FILE}" | awk '{print $1}')$(echo "${CHANGE_SIZE}" | sed 's/M//g; s/b//g')))
[[ -z "${SIZE}" || "${SIZE}" -lt 0 ]] && exit 1
if [ ! "${INPUT_FILE}" = "${OUTPUT_FILE}" ]; then
sudo cp -f "${INPUT_FILE}" "${OUTPUT_FILE}"
fi
sudo truncate -s ${SIZE}M "${OUTPUT_FILE}"
echo -e "d\n\nn\n\n\n\n\nn\nw" | sudo fdisk "${OUTPUT_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P ${LOOPX} "${OUTPUT_FILE}"
sudo e2fsck -fp $(ls ${LOOPX}* | sort -n | tail -1)
sudo resize2fs $(ls ${LOOPX}* | sort -n | tail -1)
sudo losetup -d ${LOOPX}
}
# convertova
# $1 bootloader file
# $2 ova file
function convertova() {
BLIMAGE=${1}
OVAPATH=${2}
BLIMAGE="$(readlink -f "${BLIMAGE}")"
OVAPATH="$(readlink -f "${OVAPATH}")"
VMNAME="$(basename "${OVAPATH}" .ova)"
# Download and install ovftool if it doesn't exist
if [ ! -x ovftool/ovftool ]; then
rm -rf ovftool ovftool.zip
curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.0-21452615-lin.x86_64.zip -o ovftool.zip
if [ $? -ne 0 ]; then
echo "Failed to download ovftool"
exit 1
fi
unzip ovftool.zip -d . >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Failed to extract ovftool"
exit 1
fi
chmod +x ovftool/ovftool
fi
if ! command -v qemu-img &>/dev/null; then
sudo apt install -y qemu-utils
fi
# Convert raw image to VMDK
rm -rf "OVA_${VMNAME}"
mkdir -p "OVA_${VMNAME}"
qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${BLIMAGE}" "OVA_${VMNAME}/${VMNAME}-disk1.vmdk"
qemu-img create -f vmdk "OVA_${VMNAME}/${VMNAME}-disk2.vmdk" "32G"
# Create VM configuration
cat <<_EOF_ >"OVA_${VMNAME}/${VMNAME}.vmx"
.encoding = "UTF-8"
config.version = "8"
virtualHW.version = "21"
displayName = "${VMNAME}"
annotation = "https://github.com/AuxXxilium/arc"
guestOS = "ubuntu-64"
firmware = "efi"
mks.enable3d = "TRUE"
pciBridge0.present = "TRUE"
pciBridge4.present = "TRUE"
pciBridge4.virtualDev = "pcieRootPort"
pciBridge4.functions = "8"
pciBridge5.present = "TRUE"
pciBridge5.virtualDev = "pcieRootPort"
pciBridge5.functions = "8"
pciBridge6.present = "TRUE"
pciBridge6.virtualDev = "pcieRootPort"
pciBridge6.functions = "8"
pciBridge7.present = "TRUE"
pciBridge7.virtualDev = "pcieRootPort"
pciBridge7.functions = "8"
vmci0.present = "TRUE"
hpet0.present = "TRUE"
nvram = "${VMNAME}.nvram"
virtualHW.productCompatibility = "hosted"
powerType.powerOff = "soft"
powerType.powerOn = "soft"
powerType.suspend = "soft"
powerType.reset = "soft"
tools.syncTime = "FALSE"
sound.autoDetect = "TRUE"
sound.fileName = "-1"
sound.present = "TRUE"
numvcpus = "2"
cpuid.coresPerSocket = "1"
vcpu.hotadd = "TRUE"
memsize = "4096"
mem.hotadd = "TRUE"
usb.present = "TRUE"
ehci.present = "TRUE"
usb_xhci.present = "TRUE"
svga.graphicsMemoryKB = "8388608"
usb.vbluetooth.startConnected = "TRUE"
extendedConfigFile = "${VMNAME}.vmxf"
floppy0.present = "FALSE"
ethernet0.addressType = "generated"
ethernet0.virtualDev = "vmxnet3"
ethernet0.connectionType = "nat"
ethernet0.allowguestconnectioncontrol = "true"
ethernet0.present = "TRUE"
sata0.present = "TRUE"
sata0:0.fileName = "${VMNAME}-disk1.vmdk"
sata0:0.present = "TRUE"
sata0:1.fileName = "${VMNAME}-disk2.vmdk"
sata0:1.present = "TRUE"
_EOF_
rm -f "${OVAPATH}"
ovftool/ovftool "OVA_${VMNAME}/${VMNAME}.vmx" "${OVAPATH}"
rm -rf "OVA_${VMNAME}"
}

622
scripts/functions.py Executable file → Normal file
View File

@@ -1,251 +1,373 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2025 AuxXxilium <https://github.com/AuxXxilium>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
import os, re, sys, glob, json, yaml, click, shutil, tarfile, kmodule, requests, urllib3
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry # type: ignore
from openpyxl import Workbook
@click.group()
def cli():
"""
The CLI is a commands to ARC.
"""
pass
@cli.command()
@click.option("-w", "--workpath", type=str, required=True, help="The workpath of ARC.")
@click.option("-j", "--jsonpath", type=str, required=True, help="The output path of jsonfile.")
def getmodels(workpath, jsonpath):
models = {}
platforms_yml = os.path.join(workpath, "mnt", "p3", "configs", "platforms.yml")
with open(platforms_yml, "r") as f:
P_data = yaml.safe_load(f)
P_platforms = P_data.get("platforms", [])
for P in P_platforms:
productvers = {}
for V in P_platforms[P]["productvers"]:
kpre = P_platforms[P]["productvers"][V].get("kpre", "")
kver = P_platforms[P]["productvers"][V].get("kver", "")
productvers[V] = f"{kpre}-{kver}" if kpre else kver
models[P] = {"productvers": productvers, "models": []}
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)
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)
except Exception as e:
click.echo(f"Error: {e}")
return
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 arch not in models:
continue
if name in (A for B in models for A in models[B]["models"]):
continue
models[arch]["models"].append(name)
if jsonpath:
with open(jsonpath, "w") as f:
json.dump(models, f, indent=4, ensure_ascii=False)
@cli.command()
@click.option("-w", "--workpath", type=str, required=True, help="The workpath of ARC.")
@click.option("-j", "--jsonpath", type=str, required=True, help="The output path of jsonfile.")
def getpats(workpath, jsonpath):
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}'
platforms_yml = os.path.join(workpath, "mnt", "p3", "configs", "platforms.yml")
with open(platforms_yml, "r") as f:
data = yaml.safe_load(f)
platforms = data.get("platforms", [])
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)
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)
except Exception as e:
click.echo(f"Error: {e}")
return
models = []
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 arch not in platforms:
continue
if name in models:
continue
models.append(name)
pats = {}
for M in models:
pats[M] = {}
version = '7'
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 ""
try:
req = session.get(f"{urlInfo}&product={M.replace('+', '%2B')}{major}{minor}", timeout=10, verify=False)
req.encoding = "utf-8"
data = json.loads(req.text)
except Exception as e:
click.echo(f"Error: {e}")
continue
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[M]:
pats[M][V] = {
'url': data['info']['system']['detail'][0]['items'][0]['files'][0]['url'].split('?')[0],
'sum': data['info']['system']['detail'][0]['items'][0]['files'][0]['checksum']
}
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 ""
try:
reqTmp = session.get(f"{urlInfo}&product={M.replace('+', '%2B')}{majorTmp}{minorTmp}", timeout=10, verify=False)
reqTmp.encoding = "utf-8"
dataTmp = json.loads(reqTmp.text)
except Exception as e:
click.echo(f"Error: {e}")
continue
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[M]:
pats[M][V] = {
'url': dataTmp['info']['system']['detail'][0]['items'][0]['files'][0]['url'].split('?')[0],
'sum': dataTmp['info']['system']['detail'][0]['items'][0]['files'][0]['checksum']
}
for J in I['versions']:
to_ver = J['build']
try:
reqSteps = session.get(f"{urlSteps}&product={M.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)
except Exception as e:
click.echo(f"Error: {e}")
continue
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[M]:
pats[M][V] = {
'url': S['files'][0]['url'].split('?')[0],
'sum': S['files'][0]['checksum']
}
if jsonpath:
with open(jsonpath, "w") as f:
json.dump(pats, f, indent=4, ensure_ascii=False)
@cli.command()
@click.option("-w", "--workpath", type=str, required=True, help="The workpath of ARC.")
@click.option("-j", "--jsonpath", type=str, required=True, help="The output path of jsonfile.")
def getaddons(workpath, jsonpath):
AS = glob.glob(os.path.join(workpath, "mnt", "p3", "addons", "*", "manifest.yml"))
AS.sort()
addons = {}
for A in AS:
with open(A, "r") as file:
A_data = yaml.safe_load(file)
A_name = A_data.get("name", "")
A_system = A_data.get("system", False)
A_description = A_data.get("description", "")
addons[A_name] = {"system": A_system, "description": A_description}
if jsonpath:
with open(jsonpath, "w") as f:
json.dump(addons, f, indent=4, ensure_ascii=False)
@cli.command()
@click.option("-w", "--workpath", type=str, required=True, help="The workpath of ARC.")
@click.option("-j", "--jsonpath", type=str, required=True, help="The output path of jsonfile.")
def getmodules(workpath, jsonpath):
MS = glob.glob(os.path.join(workpath, "mnt", "p3", "modules", "*.tgz"))
MS.sort()
modules = {}
TMP_PATH = "/tmp/modules"
if os.path.exists(TMP_PATH):
shutil.rmtree(TMP_PATH)
for M in MS:
M_name = os.path.splitext(os.path.basename(M))[0]
M_modules = {}
os.makedirs(TMP_PATH)
with tarfile.open(M, "r") as tar:
tar.extractall(TMP_PATH)
KS = glob.glob(os.path.join(TMP_PATH, "*.ko"))
KS.sort()
for K in KS:
K_name = os.path.splitext(os.path.basename(K))[0]
K_info = kmodule.modinfo(K, basedir=os.path.dirname(K), kernel=None)[0]
K_description = K_info.get("description", "")
K_depends = K_info.get("depends", "")
M_modules[K_name] = {"description": K_description, "depends": K_depends}
modules[M_name] = M_modules
if os.path.exists(TMP_PATH):
shutil.rmtree(TMP_PATH)
if jsonpath:
with open(jsonpath, "w") as file:
json.dump(modules, file, indent=4, ensure_ascii=False)
if __name__ == "__main__":
# -*- coding: utf-8 -*-
#
# Copyright (C) 2023 AuxXxilium <https://github.com/AuxXxilium> and Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
import os, click
WORK_PATH = os.path.abspath(os.path.dirname(__file__))
@click.group()
def cli():
"""
The CLI is a commands to Arc.
"""
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):
out = ver
arr = ver.split('-')
if len(arr) > 0:
a = arr[0].split('.')[0] if len(arr[0].split('.')) > 0 else '0'
b = arr[0].split('.')[1] if len(arr[0].split('.')) > 1 else '0'
c = arr[0].split('.')[2] if len(arr[0].split('.')) > 2 else '0'
d = arr[1] if len(arr) > 1 else '00000'
e = arr[2] if len(arr) > 2 else '0'
out = '{}.{}.{}-{}-{}'.format(a,b,c,d,e)
return out
@cli.command()
@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.
"""
try:
import fcntl, struct
import qrcode
from PIL import Image
FBIOGET_VSCREENINFO = 0x4600
FBIOPUT_VSCREENINFO = 0x4601
FBIOGET_FSCREENINFO = 0x4602
FBDEV = "/dev/fb0"
if data is not None:
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="grey", back_color="black")
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),),)
if file is not None:
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)
(xres, yres) = (1920, 1080)
with open(FBDEV, "rb") as fb:
vi = fcntl.ioctl(fb, FBIOGET_VSCREENINFO, bytes(160))
res = struct.unpack("I" * 40, vi)
if res[0] != 0 and res[1] != 0:
(xres, yres) = (res[0], res[1])
xqr, yqr = (int(xres / 8), int(xres / 8))
img = img.resize((xqr, yqr))
alpha = Image.new("RGBA", (xres, yres), (0, 0, 0, 0))
if int(location) not in range(0, 8):
location = 0
loc = (img.size[0] * int(location), alpha.size[1] - img.size[1])
alpha.paste(img, loc)
alpha.save(output)
except:
pass
@cli.command()
@click.option("-p", "--platforms", type=str, help="The platforms of Syno.")
def getmodels(platforms=None):
"""
Get Syno Models.
"""
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=0.5, status_forcelist=[500, 502, 503, 504]))
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
if platforms is not None and platforms != "":
PS = platforms.lower().replace(",", " ").split()
else:
PS = []
models = []
try:
req = session.get("https://autoupdate.synology.com/os/v2", timeout=10, verify=False)
req.encoding = "utf-8"
data = json.loads(req.text)
for I in data["channel"]["item"]:
if not I["title"].startswith("DSM"):
continue
for J in I["model"]:
arch = J["mUnique"].split("_")[1]
name = J["mLink"].split("/")[-1].split("_")[1].replace("%2B", "+")
if len(PS) > 0 and arch.lower() not in PS:
continue
if any(name == B["name"] for B in models):
continue
models.append({"name": name, "arch": arch})
models = sorted(models, key=lambda k: (k["arch"], k["name"]))
except:
pass
models.sort(key=lambda x: (x["arch"], x["name"]))
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 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=0.5, status_forcelist=[500, 502, 503, 504]))
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
if platforms is not None and platforms != "":
PS = platforms.lower().replace(",", " ").split()
else:
PS = []
models = []
try:
import re
from bs4 import BeautifulSoup
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 len(PS) > 0 and d[5].lower() not in PS:
continue
models.append({"name": d[0].split("<br")[0], "arch": d[5].lower()})
except:
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=0.5, 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 = "&major={}".format(version.split('.')[0]) if len(version.split('.')) > 0 else ""
minor = "&minor={}".format(version.split('.')[1]) if len(version.split('.')) > 1 else ""
req = session.get("{}&product={}{}{}".format(urlInfo, 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("{}-{}-{}".format(build_ver, build_num, buildnano))
if not V in pats:
pats[V]={}
pats[V]['url'] = data['info']['system']['detail'][0]['items'][0]['files'][0]['url'].split('?')[0]
pats[V]['sum'] = data['info']['system']['detail'][0]['items'][0]['files'][0]['checksum']
from_ver=0
for I in data['info']['pubVers']:
if from_ver == 0 or I['build'] < from_ver: from_ver = I['build']
for I in data['info']['productVers']:
if not I['version'].startswith(version): continue
if major == "" or minor == "":
majorTmp = "&major={}".format(I['version'].split('.')[0]) if len(I['version'].split('.')) > 0 else ""
minorTmp = "&minor={}".format(I['version'].split('.')[1]) if len(I['version'].split('.')) > 1 else ""
reqTmp = session.get("{}&product={}{}{}".format(urlInfo, 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("{}-{}-{}".format(build_ver, build_num, buildnano))
if not V in pats:
pats[V]={}
pats[V]['url'] = dataTmp['info']['system']['detail'][0]['items'][0]['files'][0]['url'].split('?')[0]
pats[V]['sum'] = dataTmp['info']['system']['detail'][0]['items'][0]['files'][0]['checksum']
for J in I['versions']:
to_ver=J['build']
reqSteps = session.get("{}&product={}&from_ver={}&to_ver={}".format(urlSteps, model.replace("+", "%2B"), from_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 'full_patch' in S or S['full_patch'] is False: continue
if not 'build_ver' in S or not S['build_ver'].startswith(version): continue
V=__fullversion("{}-{}-{}".format(S['build_ver'], S['build_num'], S['nano']))
if not V in pats:
pats[V] = {}
pats[V]['url'] = S['files'][0]['url'].split('?')[0]
pats[V]['sum'] = S['files'][0]['checksum']
except:
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 json, requests, urllib3, re
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=0.5, status_forcelist=[500, 502, 503, 504]))
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
if models is not None and models != "":
MS = models.lower().replace(",", " ").split()
else:
MS = []
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('https://archive.synology.com{}'.format(i.attrs['href']), timeout=10, verify=False)
req.encoding = 'utf-8'
bs=BeautifulSoup(req.text, 'html.parser')
p = re.compile(r"^(.*?)_(.*?)_(.*?).pat$", re.MULTILINE | re.DOTALL)
data = bs.find_all('a', string=p)
for item in data:
p = re.compile(r"DSM_(.*?)_(.*?).pat", re.MULTILINE | re.DOTALL)
rels = p.search(item.attrs['href'])
if rels != None:
info = p.search(item.attrs['href']).groups()
model = info[0].replace('%2B', '+')
if len(MS) > 0 and model.lower() not in MS:
continue
if model not in pats.keys():
pats[model]={}
pats[model][__fullversion(ver)] = item.attrs['href']
except:
pass
print(json.dumps(pats, indent=4))
@cli.command()
@click.option("-p", "--platforms", type=str, help="The platforms of Syno.")
def getmodelsoffline(platforms=None):
"""
Get Syno Models.
"""
import re, json
import requests
import fcntl, struct
if platforms is not None and platforms != "":
PS = platforms.lower().replace(",", " ").split()
else:
PS = []
models = []
with open(os.path.join('/mnt/p3/configs', "offline.json")) as user_file:
data = json.load(user_file)
for I in data["channel"]["item"]:
if not I["title"].startswith("DSM"):
continue
for J in I["model"]:
arch = J["mUnique"].split("_")[1]
name = J["mLink"].split("/")[-1].split("_")[1].replace("%2B", "+")
if len(PS) > 0 and arch.lower() not in PS:
continue
if any(name == B["name"] for B in models):
continue
models.append({"name": name, "arch": arch})
models = sorted(models, key=lambda k: (k["arch"], k["name"]))
print(json.dumps(models, indent=4))
if __name__ == "__main__":
cli()

74
scripts/grub.sh Executable file
View File

@@ -0,0 +1,74 @@
#!/usr/bin/env bash
#
# Copyright (C) 2023 AuxXxilium <https://github.com/AuxXxilium> and Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
GRUB=${1:-"grub-2.12"}
BIOS=${2:-"i386-pc i386-efi x86_64-efi"}
NAME=${3:-"ARC"}
curl -#kLO https://ftp.gnu.org/gnu/grub/${GRUB}.tar.gz
tar -zxvf ${GRUB}.tar.gz
pushd ${GRUB}
echo depends bli part_gpt > grub-core/extra_deps.lst
for B in ${BIOS}; do
b=${B}
b=(${b//-/ })
echo "Make ${b[@]} ..."
mkdir -p ${B}
pushd ${B}
../configure --prefix=$PWD/usr -sbindir=$PWD/sbin --sysconfdir=$PWD/etc --disable-werror --target=${b[0]} --with-platform=${b[1]}
make
make install
popd
done
popd
rm -f grub.img
dd if=/dev/zero of=grub.img bs=1M seek=1024 count=0
echo -e "n\np\n1\n\n+50M\nn\np\n2\n\n+50M\nn\np\n3\n\n\na\n1\nw\nq\n" | fdisk grub.img
fdisk -l grub.img
LOOPX=$(sudo losetup -f)
sudo losetup -P ${LOOPX} grub.img
sudo mkdosfs -F32 -n ${NAME}1 ${LOOPX}p1
sudo mkfs.ext2 -F -L ${NAME}2 ${LOOPX}p2
sudo mkfs.ext4 -F -L ${NAME}3 ${LOOPX}p3
rm -rf ${NAME}1
mkdir -p ${NAME}1
sudo mount ${LOOPX}p1 ${NAME}1
sudo mkdir -p ${NAME}1/EFI
sudo mkdir -p ${NAME}1/boot/grub
cat >device.map <<EOF
(hd0) ${LOOPX}
EOF
sudo mv device.map ${NAME}1/boot/grub/device.map
for B in ${BIOS}; do
args=""
args+=" ${LOOPX} --target=${B} --no-floppy --recheck --grub-mkdevicemap=${NAME}1/boot/grub/device.map --boot-directory=${NAME}1/boot"
if [[ "${B}" == *"efi" ]]; then
args+=" --efi-directory=${NAME}1 --removable --no-nvram"
else
args+=" --root-directory=${NAME}1"
fi
sudo ${GRUB}/${B}/grub-install ${args}
done
if [ -d ${NAME}1/boot/grub/fonts ] && [ -f /usr/share/grub/unicode.pf2 ]; then
sudo cp /usr/share/grub/unicode.pf2 ${NAME}1/boot/grub/fonts
fi
sudo sync
sudo umount ${LOOPX}p1
sudo losetup -d ${LOOPX}
sudo rm -rf ${NAME}1
gzip grub.img

7
scripts/random.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
function genRandomValue() {
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
}

211
scripts/vm.sh Executable file
View File

@@ -0,0 +1,211 @@
filename=$(basename "${1}")
OVFNAME=${filename%.*}
BLDISKNAME="${OVFNAME}-disk1.vmdk"
SDDISKNAME="${OVFNAME}-disk2.vmdk"
# Convert raw image to VMDK
qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${1}" "${BLDISKNAME}"
#qemu-img create -f vmdk "${SDDISKNAME}" "32G"
BLSIZE=$(du -b "${BLDISKNAME}" | cut -f 1)
SDSIZE=$(du -b "${SDDISKNAME}" | cut -f 1)
BLVIRTUALSIZE=$(qemu-img info "${BLDISKNAME}" --output json | jq -r '."virtual-size"')
SDVIRTUALSIZE=$(qemu-img info "${SDDISKNAME}" --output json | jq -r '."virtual-size"')
# Create VM configuration
cat << _EOF_ > "${OVFNAME}.ovf"
<?xml version="1.0" encoding="UTF-8"?>
<Envelope vmw:buildId="build-22220919" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<References>
<File ovf:href="${BLDISKNAME}" ovf:id="file1" ovf:size="${BLSIZE}"/>
<File ovf:href="${SDDISKNAME}" ovf:id="file2" ovf:size="${SDSIZE}"/>
</References>
<DiskSection>
<Info>Virtual disk information</Info>
<Disk ovf:capacity="${BLVIRTUALSIZE}" ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="${BLSIZE}"/>
<Disk ovf:capacity="${SDVIRTUALSIZE}" ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk2" ovf:fileRef="file2" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="${SDSIZE}"/>
</DiskSection>
<NetworkSection>
<Info>The list of logical networks</Info>
<Network ovf:name="bridged">
<Description>The bridged network</Description>
</Network>
</NetworkSection>
<VirtualSystem ovf:id="vm">
<Info>A virtual machine</Info>
<Name>${OVFNAME}</Name>
<OperatingSystemSection ovf:id="94" vmw:osType="ubuntu64Guest">
<Info>The kind of installed guest operating system</Info>
</OperatingSystemSection>
<VirtualHardwareSection>
<Info>Virtual hardware requirements</Info>
<System>
<vssd:ElementName>Virtual Hardware Family</vssd:ElementName>
<vssd:InstanceID>0</vssd:InstanceID>
<vssd:VirtualSystemIdentifier>${OVFNAME}</vssd:VirtualSystemIdentifier>
<vssd:VirtualSystemType>vmx-21</vssd:VirtualSystemType>
</System>
<Item>
<rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
<rasd:Description>Number of Virtual CPUs</rasd:Description>
<rasd:ElementName>2 virtual CPU(s)</rasd:ElementName>
<rasd:InstanceID>1</rasd:InstanceID>
<rasd:ResourceType>3</rasd:ResourceType>
<rasd:VirtualQuantity>2</rasd:VirtualQuantity>
<vmw:CoresPerSocket ovf:required="false">2</vmw:CoresPerSocket>
</Item>
<Item>
<rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
<rasd:Description>Memory Size</rasd:Description>
<rasd:ElementName>4096MB of memory</rasd:ElementName>
<rasd:InstanceID>2</rasd:InstanceID>
<rasd:ResourceType>4</rasd:ResourceType>
<rasd:VirtualQuantity>4096</rasd:VirtualQuantity>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item>
<rasd:Address>0</rasd:Address>
<rasd:Description>SATA Controller</rasd:Description>
<rasd:ElementName>sataController0</rasd:ElementName>
<rasd:InstanceID>3</rasd:InstanceID>
<rasd:ResourceSubType>vmware.sata.ahci</rasd:ResourceSubType>
<rasd:ResourceType>20</rasd:ResourceType>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item ovf:required="false">
<rasd:Address>0</rasd:Address>
<rasd:Description>USB Controller (XHCI)</rasd:Description>
<rasd:ElementName>usb3</rasd:ElementName>
<rasd:InstanceID>4</rasd:InstanceID>
<rasd:ResourceSubType>vmware.usb.xhci</rasd:ResourceSubType>
<rasd:ResourceType>23</rasd:ResourceType>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item ovf:required="false">
<rasd:Address>0</rasd:Address>
<rasd:Description>USB Controller (EHCI)</rasd:Description>
<rasd:ElementName>usb</rasd:ElementName>
<rasd:InstanceID>5</rasd:InstanceID>
<rasd:ResourceSubType>vmware.usb.ehci</rasd:ResourceSubType>
<rasd:ResourceType>23</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="ehciEnabled" vmw:value="true"/>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
<rasd:ElementName>serial0</rasd:ElementName>
<rasd:InstanceID>6</rasd:InstanceID>
<rasd:ResourceType>21</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="yieldOnPoll" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="connectable.allowGuestControl" vmw:value="false"/>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item>
<rasd:AddressOnParent>1</rasd:AddressOnParent>
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
<rasd:Connection>bridged</rasd:Connection>
<rasd:Description>VmxNet3 ethernet adapter on &quot;bridged&quot;</rasd:Description>
<rasd:ElementName>ethernet0</rasd:ElementName>
<rasd:InstanceID>7</rasd:InstanceID>
<rasd:ResourceSubType>VmxNet3</rasd:ResourceSubType>
<rasd:ResourceType>10</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="connectable.allowGuestControl" vmw:value="false"/>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
<rasd:ElementName>sound</rasd:ElementName>
<rasd:InstanceID>8</rasd:InstanceID>
<rasd:ResourceSubType>vmware.soundcard.ensoniq1371</rasd:ResourceSubType>
<rasd:ResourceType>1</rasd:ResourceType>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
<rasd:ElementName>video</rasd:ElementName>
<rasd:InstanceID>9</rasd:InstanceID>
<rasd:ResourceType>24</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="enable3DSupport" vmw:value="true"/>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
<rasd:ElementName>vmci</rasd:ElementName>
<rasd:InstanceID>10</rasd:InstanceID>
<rasd:ResourceSubType>vmware.vmci</rasd:ResourceSubType>
<rasd:ResourceType>1</rasd:ResourceType>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item>
<rasd:AddressOnParent>0</rasd:AddressOnParent>
<rasd:ElementName>disk0</rasd:ElementName>
<rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource>
<rasd:InstanceID>11</rasd:InstanceID>
<rasd:Parent>3</rasd:Parent>
<rasd:ResourceType>17</rasd:ResourceType>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item>
<rasd:AddressOnParent>1</rasd:AddressOnParent>
<rasd:ElementName>disk1</rasd:ElementName>
<rasd:HostResource>ovf:/disk/vmdisk2</rasd:HostResource>
<rasd:InstanceID>12</rasd:InstanceID>
<rasd:Parent>3</rasd:Parent>
<rasd:ResourceType>17</rasd:ResourceType>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<vmw:Config ovf:required="false" vmw:key="cpuHotAddEnabled" vmw:value="true"/>
<vmw:Config ovf:required="false" vmw:key="memoryHotAddEnabled" vmw:value="true"/>
<vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="efi"/>
<vmw:Config ovf:required="false" vmw:key="simultaneousThreads" vmw:value="1"/>
<vmw:Config ovf:required="false" vmw:key="virtualNuma.coresPerNumaNode" vmw:value="0"/>
<vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="powerOpInfo.powerOffType" vmw:value="soft"/>
<vmw:Config ovf:required="false" vmw:key="powerOpInfo.resetType" vmw:value="soft"/>
<vmw:Config ovf:required="false" vmw:key="powerOpInfo.suspendType" vmw:value="soft"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="cpuid.coresPerSocket" vmw:value="2"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="hpet0.present" vmw:value="TRUE"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="nvram" vmw:value="${OVFNAME}.nvram"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge0.present" vmw:value="TRUE"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge4.functions" vmw:value="8"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge4.present" vmw:value="TRUE"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge4.virtualDev" vmw:value="pcieRootPort"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge5.functions" vmw:value="8"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge5.present" vmw:value="TRUE"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge5.virtualDev" vmw:value="pcieRootPort"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge6.functions" vmw:value="8"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge6.present" vmw:value="TRUE"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge6.virtualDev" vmw:value="pcieRootPort"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge7.functions" vmw:value="8"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge7.present" vmw:value="TRUE"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="pciBridge7.virtualDev" vmw:value="pcieRootPort"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="usb.vbluetooth.startConnected" vmw:value="TRUE"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/>
</VirtualHardwareSection>
<AnnotationSection ovf:required="false">
<Info>A human-readable annotation</Info>
<Annotation>Arc Loader</Annotation>
</AnnotationSection>
</VirtualSystem>
</Envelope>
_EOF_
# Create manifest file for automatic integrity check
cat << _EOF_ > "${OVFNAME}.mf"
SHA256(${OVFNAME}.ovf)= $(sha256sum "${OVFNAME}.ovf" | mawk '{print $1}')
SHA256(${BLDISKNAME})= $(sha256sum "${BLDISKNAME}" | mawk '{print $1}')
SHA256(${SDDISKNAME})= $(sha256sum "${SDDISKNAME}" | mawk '{print $1}')
_EOF_
# Pack everything as OVA appliance for ESXi import
rm -f "${OVFNAME}.ova"
tar -cf "${OVFNAME}.ova" ${OVFNAME}.ovf ${BLDISKNAME} ${SDDISKNAME} ${OVFNAME}.mf
rm -f ${OVFNAME}.ovf ${BLDISKNAME} ${SDDISKNAME} ${OVFNAME}.mf
#gzip "${OVFNAME}.ova"