diff --git a/Src/Hypersplash/etc/hypersplash/arch.txt b/Src/Hypersplash/data/etc/hypersplash/arch.txt similarity index 100% rename from Src/Hypersplash/etc/hypersplash/arch.txt rename to Src/Hypersplash/data/etc/hypersplash/arch.txt diff --git a/Src/Hypersplash/etc/hypersplash/bongo-big.txt b/Src/Hypersplash/data/etc/hypersplash/bongo-big.txt similarity index 100% rename from Src/Hypersplash/etc/hypersplash/bongo-big.txt rename to Src/Hypersplash/data/etc/hypersplash/bongo-big.txt diff --git a/Src/Hypersplash/etc/hypersplash/bongo.txt b/Src/Hypersplash/data/etc/hypersplash/bongo.txt similarity index 100% rename from Src/Hypersplash/etc/hypersplash/bongo.txt rename to Src/Hypersplash/data/etc/hypersplash/bongo.txt diff --git a/Src/Hypersplash/etc/hypersplash/config.cfg b/Src/Hypersplash/data/etc/hypersplash/config.cfg similarity index 100% rename from Src/Hypersplash/etc/hypersplash/config.cfg rename to Src/Hypersplash/data/etc/hypersplash/config.cfg diff --git a/Src/Hypersplash/etc/hypersplash/hyperion.txt b/Src/Hypersplash/data/etc/hypersplash/hyperion.txt similarity index 100% rename from Src/Hypersplash/etc/hypersplash/hyperion.txt rename to Src/Hypersplash/data/etc/hypersplash/hyperion.txt diff --git a/Src/Hypersplash/etc/hypersplash/tux.txt b/Src/Hypersplash/data/etc/hypersplash/tux.txt similarity index 100% rename from Src/Hypersplash/etc/hypersplash/tux.txt rename to Src/Hypersplash/data/etc/hypersplash/tux.txt diff --git a/Src/Hypersplash/etc/hypersplash/ubuntu.txt b/Src/Hypersplash/data/etc/hypersplash/ubuntu.txt similarity index 100% rename from Src/Hypersplash/etc/hypersplash/ubuntu.txt rename to Src/Hypersplash/data/etc/hypersplash/ubuntu.txt diff --git a/Src/Hypersplash/lib/modules/Astronand/02_hypersplash.kmod b/Src/Hypersplash/lib/modules/Astronand/02_hypersplash.kmod deleted file mode 100644 index b2ed2f7..0000000 --- a/Src/Hypersplash/lib/modules/Astronand/02_hypersplash.kmod +++ /dev/null @@ -1,43 +0,0 @@ -local kernel=... - -local w,h = kernel.screen:getSize() -local x,y = kernel.screen:getCursorPos() -local c = kernel.screen:getTextColor() -kernel.screen:setTextColor(5) -local logoFile="" -if kernel.ifs.isFile("/etc/hypersplash/logo.txt") then - logoFile=kernel.ifs.readAllText("/etc/hypersplash/logo.txt") -else - logoFile=logoFile..".. *. ..\n" - logoFile=logoFile.." *= +@* +* \n" - logoFile=logoFile.." .@#. -@@@= :#@. \n" - logoFile=logoFile.." =@@+ *@@@# +@@= \n" - logoFile=logoFile.." %@@%: *@@@# -%@@% \n" - logoFile=logoFile.." :@@@@+ *@@@# .*@@@@: \n" - logoFile=logoFile.." :*@@@%- *@@@# -@@@@*: \n" - logoFile=logoFile.." =%@@#. *@@@# .#@@%= \n" - logoFile=logoFile.." :=. :*@@= *@@@# =@@+: .=: \n" - logoFile=logoFile.." %@#=..*# +@@@# #*..=#@# \n" - logoFile=logoFile.." .@@@@+=# .%@%: #=+@@@@. \n" - logoFile=logoFile.." .....=# -@= *+...:. \n" - logoFile=logoFile.." -*%*-@= - =@-*%*- \n" - logoFile=logoFile.." -@*. -@%. :%@- :*@- \n" - logoFile=logoFile.." .#@#@* \n" - logoFile=logoFile.." -#- \n" -end - -local logo=string.split(logoFile,"\n") - -local hc=(h/2)-(#logo/2) - -local function printCenter(text, yo) - kernel.screen:setCursorPos((w)-(#text), yo) - kernel.screen:printInline(text) -end - -for i,v in ipairs(logo) do - printCenter(v, hc+i) -end - -kernel.screen:setCursorPos(x,y) -kernel.screen:setTextColor(c) \ No newline at end of file diff --git a/Src/Hypersplash/lib/modules/Astronand/99_Hypersplash.kmod b/Src/Hypersplash/lib/modules/Astronand/99_Hypersplash.kmod new file mode 100644 index 0000000..0fa2e6f --- /dev/null +++ b/Src/Hypersplash/lib/modules/Astronand/99_Hypersplash.kmod @@ -0,0 +1,59 @@ +local kernel=... + +local logoFile="" +if kernel.vfs.exists("/etc/hypersplash/logo.txt") then + local file=kernel.vfs.open("/etc/hypersplash/logo.txt") + logoFile=kernel.vfs.read(file, 16384) + kernel.vfs.close(file) +else + logoFile=logoFile..".. *. ..\n" + logoFile=logoFile.." *= +@* +* \n" + logoFile=logoFile.." .@#. -@@@= :#@. \n" + logoFile=logoFile.." =@@+ *@@@# +@@= \n" + logoFile=logoFile.." %@@%: *@@@# -%@@% \n" + logoFile=logoFile.." :@@@@+ *@@@# .*@@@@: \n" + logoFile=logoFile.." :*@@@%- *@@@# -@@@@*: \n" + logoFile=logoFile.." =%@@#. *@@@# .#@@%= \n" + logoFile=logoFile.." :=. :*@@= *@@@# =@@+: .=: \n" + logoFile=logoFile.." %@#=..*# +@@@# #*..=#@# \n" + logoFile=logoFile.." .@@@@+=# .%@%: #=+@@@@. \n" + logoFile=logoFile.." .....=# -@= *+...:. \n" + logoFile=logoFile.." -*%*-@= - =@-*%*- \n" + logoFile=logoFile.." -@*. -@%. :%@- :*@- \n" + logoFile=logoFile.." .#@#@* \n" + logoFile=logoFile.." -#- \n" +end + +local logo=string.split(logoFile,"\n") + +for _,term in pairs(kernel.vfs.listdir("/dev/tty/")) do + local file = kernel.vfs.open("/dev/tty/"..term, "w") + kernel.vfs.devctl(file, "clear") + kernel.vfs.devctl(file, "sfgc", 0x00FFFF) + kernel.vfs.devctl(file, "sbgc", 0x000000) + + local tmp = kernel.vfs.devctl(file, "size") + local w,h = tonumber(tmp:sub(1, tmp:find(";")-1)), tonumber(tmp:sub(tmp:find(";")+1)) + + local hc=(h/2)-(#logo/2) + local function printCenter(text, yo) + kernel.vfs.devctl(file, "spos", (w/2)-(#text/2), yo) + kernel.vfs.write(file, text) + end + + for i,v in ipairs(logo) do + printCenter(v, hc+i) + end + + kernel.vfs.close(file) +end + +kernel.sleep(1.5) + +for _,term in pairs(kernel.vfs.listdir("/dev/tty/")) do + local file = kernel.vfs.open("/dev/tty/"..term, "w") + kernel.vfs.devctl(file, "clear") + kernel.vfs.devctl(file, "sfgc", 0xFFFFFF) + kernel.vfs.devctl(file, "sbgc", 0x000000) + kernel.vfs.close(file) +end \ No newline at end of file diff --git a/Src/Hypersplash/lib/modules/Astronand/99_delay.kmod b/Src/Hypersplash/lib/modules/Astronand/99_delay.kmod deleted file mode 100644 index 04a2cac..0000000 --- a/Src/Hypersplash/lib/modules/Astronand/99_delay.kmod +++ /dev/null @@ -1,2 +0,0 @@ -local kernel=... -kernel.sleep(1.5) \ No newline at end of file diff --git a/Src/ccemu/bin/ccemu b/Src/ccemu/data/bin/ccemu similarity index 100% rename from Src/ccemu/bin/ccemu rename to Src/ccemu/data/bin/ccemu diff --git a/Src/ccemu/usr/lib/ccemu/vm.lua b/Src/ccemu/data/usr/lib/ccemu/vm.lua similarity index 100% rename from Src/ccemu/usr/lib/ccemu/vm.lua rename to Src/ccemu/data/usr/lib/ccemu/vm.lua diff --git a/Src/rootkit/lib/modules/Astronand/95_rootkit.kmod b/Src/rootkit/data/lib/modules/Astronand/95_rootkit.kmod similarity index 80% rename from Src/rootkit/lib/modules/Astronand/95_rootkit.kmod rename to Src/rootkit/data/lib/modules/Astronand/95_rootkit.kmod index 3e4cf19..c581104 100644 --- a/Src/rootkit/lib/modules/Astronand/95_rootkit.kmod +++ b/Src/rootkit/data/lib/modules/Astronand/95_rootkit.kmod @@ -1,4 +1,4 @@ local kernel=... kernel.syscalls["rootkit_getKernel"]=function() if kernel.uid==0 then return kernel else error("Permission Denied") end end kernel.log("rootkit is installed", "WARN", 8) -kernel.version=kernel.version.."(rootkit V1)" \ No newline at end of file +kernel.version=kernel.version.." (rootkit V1)" \ No newline at end of file diff --git a/Src/taskunmanager/bin/taskunmanager b/Src/taskunmanager/data/bin/taskunmanager similarity index 100% rename from Src/taskunmanager/bin/taskunmanager rename to Src/taskunmanager/data/bin/taskunmanager diff --git a/Src/taskunmanager/usr/lib/tu/store.lua b/Src/taskunmanager/data/usr/lib/tu/store.lua similarity index 100% rename from Src/taskunmanager/usr/lib/tu/store.lua rename to Src/taskunmanager/data/usr/lib/tu/store.lua diff --git a/compile.py b/compile.py new file mode 100644 index 0000000..9ae06c0 --- /dev/null +++ b/compile.py @@ -0,0 +1,197 @@ +#!/usr/bin/env python3 + +import hashlib +import json +import shutil +import tarfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parent +SOURCE = ROOT / "Src" +PACKAGE_ROOT = ROOT / "packages" +PACKAGE_DIR = PACKAGE_ROOT / "raw" + +# main repo +#API_ROOT = "https://git.astronand.dev/Astronand/HyperionOS-packages/raw/branch/main" + +# local repo +API_ROOT = "http://localhost:8001" + +DEFAULT_VERSION = "0.0.0" +DEFAULT_DESCRIPTION = "No description provided" +DEFAULT_AUTHORS = [] +DEFAULT_DEPENDENCIES = [] + + +def debug(message): + print(f"[COMPILE] {message}", flush=True) + + +def sha256(path): + hasher = hashlib.sha256() + + with open(path, "rb") as file: + while chunk := file.read(1024 * 1024): + hasher.update(chunk) + + return hasher.hexdigest() + + +def exclude(info): + blocked = (".git", "__pycache__", ".pyc") + + if any(item in info.name.split("/") for item in blocked): + return None + + return info + + +def read_file(folder, names, default): + for name in names: + file = folder / name + + if file.exists(): + return file.read_text(encoding="utf-8").strip() + + return default + + +def read_authors(folder): + authors_file = folder / "authors.txt" + + if not authors_file.exists(): + return DEFAULT_AUTHORS + + authors = [] + + for line in authors_file.read_text(encoding="utf-8").splitlines(): + line = line.strip() + + if line: + authors.append(line) + + return authors if authors else DEFAULT_AUTHORS + + +def read_dependencies(folder): + dependencies_file = folder / "dependencies.txt" + + if not dependencies_file.exists(): + return DEFAULT_DEPENDENCIES + + dependencies = [] + + for line in dependencies_file.read_text(encoding="utf-8").splitlines(): + line = line.strip() + + if line: + dependencies.append(line) + + return dependencies if dependencies else DEFAULT_DEPENDENCIES + + +def create_package(folder): + name = folder.name + + tarball = PACKAGE_DIR / f"{name}.tar.gz" + pkg_file = PACKAGE_ROOT / f"{name}.pkg" + + if tarball.exists(): + debug(f"Replacing {tarball.name}") + tarball.unlink() + + debug(f"Packing {name}") + + with tarfile.open(tarball, "w:gz") as archive: + archive.add(folder, arcname=name, filter=exclude) + + package_hash = sha256(tarball) + + metadata = { + "id": name, + "description": read_file( + folder, + ["description.md", "description.txt"], + DEFAULT_DESCRIPTION, + ), + "authors": read_authors(folder), + "dependencies": read_dependencies(folder), + "version": read_file( + folder, + ["version.txt"], + DEFAULT_VERSION, + ), + "hash": package_hash, + "tarball": f"{API_ROOT}/packages/raw/{name}.tar.xz", + } + + with open(pkg_file, "w", encoding="utf-8") as file: + json.dump(metadata, file, indent=4) + file.write("\n") + + debug(f"Generated {pkg_file.name}") + debug(f"{name}: {package_hash}") + + return tarball + +def load_spm(): + spm_file = ROOT / "spm.json" + + if not spm_file.exists(): + return { + "refs": {}, + "maintainers": [], + "packages": {} + } + + with open(spm_file, "r", encoding="utf-8") as file: + data = json.load(file) + + data.setdefault("refs", {}) + data.setdefault("maintainers", []) + data.setdefault("packages", {}) + + return data + + +def update_spm(): + spm = load_spm() + + packages = {} + + for pkg in sorted(PACKAGE_ROOT.glob("*.pkg")): + with open(pkg, "r", encoding="utf-8") as file: + metadata = json.load(file) + + packages[metadata["id"]] = f"{API_ROOT}/packages/{pkg.name}" + + spm["packages"] = packages + spm["self"] = f"{API_ROOT}/spm.json" + + with open(ROOT / "spm.json", "w", encoding="utf-8") as file: + json.dump(spm, file, indent=4) + file.write("\n") + + debug("Generated spm.json") + +def main(): + if not SOURCE.exists(): + debug("Src directory missing") + return 1 + + if PACKAGE_ROOT.exists(): + shutil.rmtree(PACKAGE_ROOT) + + PACKAGE_DIR.mkdir(parents=True, exist_ok=True) + + for folder in sorted(SOURCE.iterdir()): + if folder.is_dir(): + create_package(folder) + + update_spm() + debug("Complete") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/Hypersplash.pkg b/packages/Hypersplash.pkg new file mode 100644 index 0000000..07c179a --- /dev/null +++ b/packages/Hypersplash.pkg @@ -0,0 +1,9 @@ +{ + "id": "Hypersplash", + "description": "No description provided", + "authors": [], + "dependencies": [], + "version": "0.0.0", + "hash": "91bdf5d35d76286a08f8d8001df9fc134c9a429cfebe8bd85edb5dd9a30de533", + "tarball": "http://localhost:8001/packages/raw/Hypersplash.tar.xz" +} diff --git a/packages/ccemu.pkg b/packages/ccemu.pkg new file mode 100644 index 0000000..351b565 --- /dev/null +++ b/packages/ccemu.pkg @@ -0,0 +1,9 @@ +{ + "id": "ccemu", + "description": "No description provided", + "authors": [], + "dependencies": [], + "version": "0.0.0", + "hash": "3cbbf1628cc1b7a6de6606f97f6a1a379ab93f6b3bb1e86ea0ec9eb2865dd731", + "tarball": "http://localhost:8001/packages/raw/ccemu.tar.xz" +} diff --git a/packages/raw/Hypersplash.tar.gz b/packages/raw/Hypersplash.tar.gz new file mode 100644 index 0000000..b2c360b Binary files /dev/null and b/packages/raw/Hypersplash.tar.gz differ diff --git a/packages/raw/ccemu.tar.gz b/packages/raw/ccemu.tar.gz new file mode 100644 index 0000000..3775977 Binary files /dev/null and b/packages/raw/ccemu.tar.gz differ diff --git a/packages/raw/rootkit.tar.gz b/packages/raw/rootkit.tar.gz new file mode 100644 index 0000000..e17f79f Binary files /dev/null and b/packages/raw/rootkit.tar.gz differ diff --git a/packages/raw/taskunmanager.tar.gz b/packages/raw/taskunmanager.tar.gz new file mode 100644 index 0000000..e99f0ae Binary files /dev/null and b/packages/raw/taskunmanager.tar.gz differ diff --git a/packages/rootkit.pkg b/packages/rootkit.pkg new file mode 100644 index 0000000..fa265be --- /dev/null +++ b/packages/rootkit.pkg @@ -0,0 +1,9 @@ +{ + "id": "rootkit", + "description": "No description provided", + "authors": [], + "dependencies": [], + "version": "0.0.0", + "hash": "be789fb72ead5cb08e1e97bee4fb1fa5c5c2aabda26212e735adea57d098654f", + "tarball": "http://localhost:8001/packages/raw/rootkit.tar.xz" +} diff --git a/packages/taskunmanager.pkg b/packages/taskunmanager.pkg new file mode 100644 index 0000000..0f89ac0 --- /dev/null +++ b/packages/taskunmanager.pkg @@ -0,0 +1,9 @@ +{ + "id": "taskunmanager", + "description": "No description provided", + "authors": [], + "dependencies": [], + "version": "0.0.0", + "hash": "941433634cbc4c71ca4af6de2177d6a3c9017b2e418104e2db2b91a9c052ecb6", + "tarball": "http://localhost:8001/packages/raw/taskunmanager.tar.xz" +} diff --git a/pkg/Hypersplash.pkg b/pkg/Hypersplash.pkg deleted file mode 100644 index f72a4ce..0000000 --- a/pkg/Hypersplash.pkg +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Name": "Hypersplash", - "Version": "1.0.0", - "Publishers": ["Astronand"], - "Description": "A splash screen for HyperionOS.", - "Dependencies": [ - "HyperionOS" - ], - "Tar":"https://git.astronand.dev/Astronand/HyperionOS-packages/raw/branch/main/tar/Hypersplash.tar" -} \ No newline at end of file diff --git a/pkg/rootkit.pkg b/pkg/rootkit.pkg deleted file mode 100644 index bc9d594..0000000 --- a/pkg/rootkit.pkg +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Name": "rootkit", - "Version": "1.0.0", - "Publishers": ["Astronand"], - "Description": "A package that allows for kernel level access to the system (requires root)", - "Dependencies": [ - "HyperionOS" - ], - "Tar":"https://git.astronand.dev/Astronand/HyperionOS-packages/raw/branch/main/tar/rootkit.tar" -} \ No newline at end of file diff --git a/spm.json b/spm.json new file mode 100644 index 0000000..578aaf1 --- /dev/null +++ b/spm.json @@ -0,0 +1,13 @@ +{ + "packages": { + "Hypersplash": "http://localhost:8001/packages/Hypersplash.pkg", + "ccemu": "http://localhost:8001/packages/ccemu.pkg", + "rootkit": "http://localhost:8001/packages/rootkit.pkg", + "taskunmanager": "http://localhost:8001/packages/taskunmanager.pkg" + }, + "refs": [], + "maintainers": [ + "Astronand" + ], + "self": "http://localhost:8001/spm.json" +} diff --git a/spm.src b/spm.src deleted file mode 100644 index f76ef11..0000000 --- a/spm.src +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Packages":{ - "Hypersplash":"https://git.astronand.dev/Astronand/HyperionOS-packages/raw/branch/main/pkg/Hypersplash.pkg", - "rootkit":"https://git.astronand.dev/Astronand/HyperionOS-packages/raw/branch/main/pkg/rootkit.pkg" - }, - "Nodes":[], - "Blacklist":[] -} \ No newline at end of file diff --git a/tar/Hypersplash.tar b/tar/Hypersplash.tar deleted file mode 100644 index 9512e49..0000000 Binary files a/tar/Hypersplash.tar and /dev/null differ diff --git a/tar/rootkit.tar b/tar/rootkit.tar deleted file mode 100644 index c0a00b4..0000000 Binary files a/tar/rootkit.tar and /dev/null differ