This commit is contained in:
2026-07-28 20:13:50 -04:00
parent 49c9e5e37c
commit 56646625c0
71 changed files with 638 additions and 103 deletions
+2 -1
View File
@@ -6,6 +6,7 @@
"printf", "printf",
"printInline", "printInline",
"toHex", "toHex",
"loadcstr" "loadcstr",
"userinput"
] ]
} }
+9 -1
View File
@@ -15,8 +15,10 @@ See `building.md`.
- Functionality is split into kernel modules (`.kmod`) - Functionality is split into kernel modules (`.kmod`)
- Task-based lightweight thread/task preemptive scheduler with process isolation and IPC support - Task-based lightweight thread/task preemptive scheduler with process isolation and IPC support
- Virtual filesystem unified interface for disk, RAM, and virtual filesystems - Virtual filesystem
- TTY & Shell - TTY & Shell
- Sockets
-
--- ---
@@ -48,6 +50,12 @@ Add your name to `contributors.md` when your PR is merged.
--- ---
## Information
Trello: https://trello.com/b/8dryrlMi
---
## License ## License
This project is licensed under the MIT License. See the LICENSE file for details. This project is licensed under the MIT License. See the LICENSE file for details.
-7
View File
@@ -1,7 +0,0 @@
local http=require("http")
local ok,err = xpcall(http.get, debug.traceback, "http://localhost:8000/spm.json")
if not ok then
print(err)
else
print(err.body)
end
+8 -5
View File
@@ -1,11 +1,6 @@
--:Minify:-- --:Minify:--
local fs={} local fs={}
-- "open" : open
-- "read" : read
-- "write" : write
-- "close" : close
function fs.open(path, mode) function fs.open(path, mode)
local fd=syscall.open(path,mode) local fd=syscall.open(path,mode)
local ret={ local ret={
@@ -140,4 +135,12 @@ function fs.isDir(path)
return syscall.type(path) == "directory" return syscall.type(path) == "directory"
end end
function fs.symlink(target, path)
return syscall.syslink(target, path)
end
function fs.readlink(path)
return syscall.readlink(path)
end
return fs return fs
@@ -463,7 +463,12 @@ local ok, err = xpcall(function()
getTextColor = function() getTextColor = function()
return fg return fg
end, end,
enable=function() end, enable=function()
for i=1, #allscreens do
allscreens[i].clear()
allscreens[i].setCursorPos(1, 1)
end
end,
disable=function() end disable=function() end
}, },
architecture="cct", architecture="cct",
@@ -220,9 +220,6 @@ local function newtty(obj, id, ev)
gbgc=function() gbgc=function()
return bg return bg
end, end,
gctrl=function()
return serializeBool(kernel.cct.ctrl)..";"..serializeBool(kernel.cct.alt)
end,
isvirt=function() isvirt=function()
return false return false
end, end,
@@ -269,6 +266,9 @@ kernel.devfs.data["input"]["keyboard1"] = function(op, mode)
return rv return rv
end, end,
write=function(content) write=function(content)
end,
gctrl=function()
return serializeBool(kernel.cct.ctrl)..";"..serializeBool(kernel.cct.alt)
end end
} }
if mode=="rw" then if mode=="rw" then
+3 -3
View File
@@ -7,10 +7,10 @@ local disks=EFI.disks
local arch=EFI.architecture local arch=EFI.architecture
local kernel = {} local kernel = {}
kernel.LOG_Text="" kernel.LOG_Text=""
kernel.version="HyperionOS V1.2.4-dev_5" kernel.version="HyperionOS V1.2.4"
kernel.tag="1.2.4-dev_5" kernel.tag="1.2.4"
kernel.process = "Kernel" kernel.process = "Kernel"
kernel.users={[0]="root",[1]="User"} kernel.users={[0]="root",[1000]="User"}
kernel.hostname = "hyperion" kernel.hostname = "hyperion"
kernel.groups = {} kernel.groups = {}
kernel.uid = 0 kernel.uid = 0
@@ -23,6 +23,7 @@ function string.split(str, delim, maxResultCountOrNil)
assert(#delim == 1, "only delim len 1 supported for now") assert(#delim == 1, "only delim len 1 supported for now")
if not str then return false end if not str then return false end
maxResultCountOrNil = (maxResultCountOrNil or 0) - 1 maxResultCountOrNil = (maxResultCountOrNil or 0) - 1
if str == "" then return {} end
local rv = {} local rv = {}
local buf = "" local buf = ""
for i = 1, #str do for i = 1, #str do
@@ -124,7 +124,7 @@ end
local function validateComponent(comp) local function validateComponent(comp)
local lower = comp:lower() local lower = comp:lower()
if not lower:match(SAFE_COMPONENT_PATTERN) then if not comp:match(SAFE_COMPONENT_PATTERN) then
error("EINVAL: illegal characters in path component: " .. comp, 3) error("EINVAL: illegal characters in path component: " .. comp, 3)
end end
if lower == ".meta" then if lower == ".meta" then
@@ -276,7 +276,7 @@ local function namei(path, noFollow, symDepth)
else else
validateComponent(comp) validateComponent(comp)
local lname = comp:lower() local lname = comp
local curPath = "/" .. table.concat(stack, "/") local curPath = "/" .. table.concat(stack, "/")
@@ -374,7 +374,7 @@ local function normalizePath(path)
table.remove(stack) table.remove(stack)
end end
else else
table.insert(stack, comp:lower()) table.insert(stack, comp)
end end
end end
@@ -184,11 +184,16 @@ function socket.sockshutdown(fd)
return true return true
end end
function socket.socketendpoints()
return table.keys(socket.handlers)
end
sys.socket = socket.socket sys.socket = socket.socket
sys.connect = socket.connect sys.connect = socket.connect
sys.listen = socket.listen sys.listen = socket.listen
sys.send = socket.send sys.send = socket.send
sys.recv = socket.recv sys.recv = socket.recv
sys.sockshutdown = socket.sockshutdown sys.sockshutdown = socket.sockshutdown
sys.socketendpoints = socket.socketendpoints
kernel.log("Loaded socket module") kernel.log("Loaded socket module")
@@ -20,3 +20,24 @@ function printInline(...)
output = output:sub(1, -2) output = output:sub(1, -2)
syscall.write(1, output) syscall.write(1, output)
end end
function userinput(fd, helpstr, replacestr, fdo)
local str = ""
if helpstr then print(helpstr) end
while true do
local inp = syscall.read(fd)
if inp~="" and inp~=nil then
if inp~="\n" then
if replacestr then
syscall.write(fdo, replacestr)
else
syscall.write(fdo, inp)
end
str = inp
else
break
end
end
end
return str
end
+3 -1
View File
@@ -315,7 +315,9 @@ end
-- CRC-16/CRC-32 computation -- CRC-16/CRC-32 computation
local band, bnot, xor, lshift, rshift local band, bnot, xor, lshift, rshift
local bit32
local ok, temp = pcall(require, "bit32")
if ok then bit32=temp end
if bit ~= nil then if bit ~= nil then
band = bit.band band = bit.band
bnot = bit.bnot bnot = bit.bnot
+3 -3
View File
@@ -1211,9 +1211,9 @@ local function runCommand(command)
local proc = syscall.spawn(function() local proc = syscall.spawn(function()
-- Open standard fds so programs that don't do it themselves work correctly. -- Open standard fds so programs that don't do it themselves work correctly.
syscall.open("/dev/input/keyboard1", "r") -- fd 0 stdin syscall.open("/proc/self/parent/fd/0", "r") -- fd 0 stdin
syscall.open("/dev/tty/1", "w") -- fd 1 stdout syscall.open("/proc/self/parent/fd/1", "w") -- fd 1 stdout
syscall.open("/dev/null", "w") -- fd 2 stderr syscall.open("/proc/self/parent/fd/2", "w") -- fd 2 stderr
-- exec replaces this coroutine's code with a fresh isolated environment -- exec replaces this coroutine's code with a fresh isolated environment
-- compiled from disk by the kernel (via loadExecutable -> freshUserEnv), -- compiled from disk by the kernel (via loadExecutable -> freshUserEnv),
-- so the child cannot share any upvalue or syscall table state with hysh. -- so the child cannot share any upvalue or syscall table state with hysh.
+280 -18
View File
@@ -1,15 +1,149 @@
local args={...} --:Minify:--
local spm = function(...)
if syscall.geteuid()~=0 then print("Permission denied") return end
local inpArgs = { ... }
local args = {}
local cloptions = {
S = false,
y = false,
u = false,
R = false,
h = false,
r = false,
Q = false,
l = false,
o = false,
i = false,
e = false,
t = false,
sysroot = "",
init = false,
help = false,
source = false
}
-- local test repo local i = 1
local rootRepo="http://localhost:8000/spm.json" local fs = require("fs")
--local rootRepo="https://git.astronand.dev/Hyperion/HyperionOS/raw/branch/main/spm.json"
local json = require("json")
local http = require("http") local http = require("http")
local json = require("json")
local tar = require("tar")
local deflate = require("deflate") local deflate = require("deflate")
local httpcache = {}
local function get(url)
if httpcache[url] then return httpcache[url] end
local ret = http.get(url)
httpcache[url] = ret
return ret
end
while i <= #inpArgs do
local v = inpArgs[i]
if v:sub(1, 2) == "--" then
local opt, value = v:match("^%-%-(.-)=(.*)$")
if not opt then
opt = v:sub(3)
end
if cloptions[opt] == nil then
print("spm: unrecognized option '" .. v .. "'.")
print("try 'spm --help' for more information.")
return
end
if type(cloptions[opt]) == "boolean" then
cloptions[opt] = true
else
if value == nil then
i = i + 1
value = inpArgs[i]
end
if value == nil then
print("spm: option '--" .. opt .. "' requires an argument.")
return
end
cloptions[opt] = value
end
elseif v:sub(1, 1) == "-" then
for j = 2, #v do
local opt = v:sub(j, j)
if cloptions[opt] == nil then
print("spm: invalid option '-" .. opt .. "'.")
print("try 'spm --help' for more information.")
return
end
if type(cloptions[opt]) ~= "boolean" then
print("spm: option '-" .. opt .. "' requires the long form '--" .. opt .. "=value'.")
return
end
cloptions[opt] = true
end
else
table.insert(args, v)
end
i = i + 1
end
if cloptions.sysroot=="" then
syscall.chdir("/")
else
syscall.chdir(cloptions.sysroot)
end
if cloptions.init then
fs.mkdir("var/spm/cache/")
fs.mkdir("var/spm/db/")
fs.writeAllText("var/spm/db/repos.list","")
fs.mkdir("var/spm/db/installed/")
fs.mkdir("etc/spm/")
fs.writeAllText("etc/spm/sources.list","https://git.astronand.dev/Hyperion/HyperionOS/raw/branch/main/spm.json\nhttp://localhost:8000/spm.json")
end
if not fs.exists("var/spm/") or not fs.exists("etc/spm/") then
print("spm not initialized run \"spm --init\"")
return
end
local repodb = string.split(fs.readAllText("var/spm/db/repos.list"), "\n")
local sourcelist = string.split(fs.readAllText("etc/spm/sources.list"), "\n")
local pkgdblist = fs.list("var/spm/db/installed/")
local pkgdb = {}
for _,v in ipairs(pkgdblist) do
local file = fs.readAllText("var/spm/db/installed/"..v)
pkgdb[v] = json.decode(file)
end
local function printpkgs(list)
local colWidth=0
local tmp = syscall.devctl(1, "size")
local sizeX, sizeY = tonumber(tmp:sub(1, tmp:find(";")-1)), tonumber(tmp:sub(tmp:find(";")+1))
for _, v in ipairs(list) do
if #v + 2 > colWidth then colWidth = #v + 2 end
end
local numCols = math.max(1, math.floor(sizeX / colWidth))
for i, v in ipairs(list) do
printInline(v.id)
printInline((" "):rep(colWidth - #v))
if i % numCols == 0 then print("") end
end
if #list % numCols ~= 0 then print("") end
end
local function checkRepo(repo) local function checkRepo(repo)
local resp = http.get(repo) local resp = get(repo)
if not resp then return false end
if resp.code ~= 200 then if resp.code ~= 200 then
return false return false
end end
@@ -24,7 +158,7 @@ local function getRepos(root)
local repos = {} local repos = {}
local visited = {} local visited = {}
local queue = {root} local queue = table.values(root)
local head = 1 local head = 1
while head <= #queue do while head <= #queue do
@@ -34,12 +168,11 @@ local function getRepos(root)
if not visited[url] then if not visited[url] then
visited[url] = true visited[url] = true
print("GET:"..tostring(head-1).." "..url)
local ok, repo = checkRepo(url) local ok, repo = checkRepo(url)
if ok then if ok then
table.insert(repos, { table.insert(repos, url)
url = url,
data = repo
})
if repo.refs then if repo.refs then
for _, ref in ipairs(repo.refs) do for _, ref in ipairs(repo.refs) do
@@ -56,13 +189,142 @@ local function getRepos(root)
end end
local function getPkg(name) local function getPkg(name)
for _, url in ipairs(repodb) do
local ok, repo = checkRepo(url)
if not ok then
print("Failed to contact repository:")
print(url)
print("Consider running 'spm -Sy' to remove broken repositories.")
else
if repo.packages then
if repo.packages[name] then
local pkgurl = repo.packages[name]
local resp = get(pkgurl)
if not resp then
print("Repository: "..url)
print("Has broken package: "..name)
print("Ignoring")
else
if resp.code ~= 200 then
print("Repository: "..url)
print("Has broken package: "..name)
print("Ignoring")
else
local pkgjson = json.decode(resp.body)
if not pkgjson then
print("Repository: "..url)
print("Has broken package: "..name)
print("Ignoring")
else
return {
url=pkgurl,
tar=pkgjson.tarball,
hash=pkgjson.hash,
id=pkgjson.id,
deps=pkgjson.dependencies,
desc=pkgjson.description,
auth=pkgjson.authors,
ver=pkgjson.version
}
end
end
end
end
end
end
end
return false, "target not found: "..name
end
if cloptions.S then
if cloptions.y then
print("Updating repositories...")
repodb={}
for _,v in ipairs(getRepos(sourcelist)) do
repodb[#repodb+1]=v
end
print("Writing new data...")
local str = ""
for _,v in ipairs(repodb) do
str=str..v.."\n"
end
fs.writeAllText("var/spm/db/repos.list", str)
end
if cloptions.i then
-- info remote
end
local needed = {}
local found = {}
for i,v in ipairs(args) do
local pkg, err = getPkg(v)
if not pkg then print(err) syscall.exit(1) end
needed[#needed+1] = pkg
found[v]=true
end
if cloptions.u then
for i,v in ipairs(table.keys(pkgdb)) do
local pkg, err = getPkg(v)
if pkg then
needed[#needed+1] = pkg
found[v]=true
end
end
end
local head = 0
while head<#needed do
head=head+1
for i,v in ipairs(needed[head].deps) do
if not found[v] and not pkgdb[v] then
local pkg, err = getPkg(v)
if pkg then
needed[#needed+1] = pkg
found[v]=true
end
end
end
end
if #needed==0 then
syscall.exit()
end
print("")
print("Packages("..tostring(#needed).."):")
printpkgs(needed)
print("")
while true do
local text = userinput(0, "Proceed with download [Y/n]", nil, 1)
if text=="" then
break
elseif text:lower()=="y" then
break
elseif text:lower()=="n" then
syscall.exit()
end
end
local files = {}
for _,v in ipairs(needed) do
local file = http.get(v.tar)
end end
if args[1] == "install" then elseif cloptions.R then
local pkg=getPkg(args[2]) -- remove tree
elseif args[1] == "sync" then elseif cloptions.Q then
error("not implemented") if cloptions.l then
elseif args[1] == "remove" then -- list installed files
error("not implemented") elseif cloptions.o then
-- get package file arg[1] is from
elseif cloptions.e then
-- list installed manually
elseif cloptions.i then
-- list installed info
elseif cloptions.t then
-- list orphans
end
end
end
local ok,err = xpcall(spm, debug.traceback, ...)
if not ok then
print("Fatal error in spm:")
print(err)
end end
+4
View File
@@ -0,0 +1,4 @@
tar
deflate
json
minify
+2
View File
@@ -0,0 +1,2 @@
Hyperion
Astronand
View File
+201
View File
@@ -0,0 +1,201 @@
local LibDeflate = require("LibDeflate")
local tar = {}
local function pad512(n)
return math.ceil(n / 512) * 512
end
local function octal(n, size)
local s = string.format("%0" .. (size - 1) .. "o", n)
return s .. "\0"
end
local function header(name, size, typeflag, link)
local h = string.rep("\0", 512)
local function put(pos, len, value)
h = h:sub(1, pos - 1) ..
value ..
h:sub(pos + len)
end
put(1, 100, name)
put(101, 8, octal(0, 8))
put(109, 8, octal(0, 8))
put(117, 8, octal(0, 8))
put(125, 12, octal(size, 12))
put(137, 12, octal(os.time(), 12))
put(149, 8, " ")
put(157, 1, typeflag)
if link then
put(158, 100, link)
end
put(257, 6, "ustar\0")
put(263, 2, "00")
local sum = 0
for i = 1, 512 do
sum = sum + h:byte(i)
end
put(149, 8, string.format("%06o\0 ", sum))
return h
end
local function add(out, node, prefix)
local path = prefix and (prefix .. "/" .. node.name)
or node.name
if node.type == "dir" then
table.insert(out, header(path .. "/", 0, "5"))
for _, child in ipairs(node.content) do
add(out, child, path)
end
elseif node.type == "file" then
local data = node.content or ""
table.insert(out, header(path, #data, "0"))
table.insert(out, data)
local padding = pad512(#data) - #data
if padding > 0 then
table.insert(out, string.rep("\0", padding))
end
elseif node.type == "symlink" then
table.insert(out,
header(path, 0, "2", node.content)
)
end
end
function tar.pack(tree, gzip)
local out = {}
add(out, tree)
table.insert(out, string.rep("\0", 1024))
local data = table.concat(out)
if gzip then
return LibDeflate:CompressGzip(data)
end
return data
end
local function read_octal(s)
s = s:gsub("\0.*", "")
return tonumber(s, 8) or 0
end
function tar.unpack(data)
if data:sub(1,2) == "\31\139" then
data = assert(LibDeflate:DecompressGzip(data))
end
local root = {
type = "dir",
name = "",
content = {}
}
local function add_path(parts, node)
local current = root
for i = 1, #parts - 1 do
local name = parts[i]
local found
for _, child in ipairs(current.content) do
if child.name == name and child.type == "dir" then
found = child
break
end
end
if not found then
found = {
type = "dir",
name = name,
content = {}
}
table.insert(current.content, found)
end
current = found
end
table.insert(current.content, node)
end
local pos = 1
while pos + 511 <= #data do
local h = data:sub(pos, pos + 511)
if h == string.rep("\0", 512) then
break
end
local name = h:sub(1,100):gsub("\0.*", "")
local size = read_octal(h:sub(125,136))
local kind = h:sub(157,157)
local skip = false
-- Ignore PAX headers and GNU long filename records
if kind == "x" or kind == "g" or kind == "L" then
skip = true
end
if not skip then
local node
if kind == "5" then
node = {
type = "dir",
name = name:gsub("/$", ""),
content = {}
}
elseif kind == "2" then
node = {
type = "symlink",
name = name,
content =
h:sub(158,257):gsub("\0.*", "")
}
else
node = {
type = "file",
name = name,
content =
data:sub(pos + 512,
pos + 511 + size)
}
end
local parts = {}
for part in node.name:gmatch("[^/]+") do
table.insert(parts, part)
end
add_path(parts, node)
end
pos = pos + 512 + pad512(size)
end
return root
end
return tar
View File
View File
+2 -1
View File
@@ -122,7 +122,7 @@ def create_package(folder):
DEFAULT_VERSION, DEFAULT_VERSION,
), ),
"hash": package_hash, "hash": package_hash,
"tarball": f"{API_ROOT}/packages/raw/{name}.tar.xz", "tarball": f"{API_ROOT}/packages/raw/{name}.tar.gz",
} }
with open(pkg_file, "w", encoding="utf-8") as file: with open(pkg_file, "w", encoding="utf-8") as file:
@@ -166,6 +166,7 @@ def update_spm():
packages[metadata["id"]] = f"{API_ROOT}/packages/{pkg.name}" packages[metadata["id"]] = f"{API_ROOT}/packages/{pkg.name}"
spm["packages"] = packages spm["packages"] = packages
spm["self"] = f"{API_ROOT}/spm.json"
with open(ROOT / "spm.json", "w", encoding="utf-8") as file: with open(ROOT / "spm.json", "w", encoding="utf-8") as file:
json.dump(spm, file, indent=4) json.dump(spm, file, indent=4)
+7
View File
@@ -671,3 +671,10 @@ printInline=function(...) end
--- @param fmt string --- @param fmt string
--- @param ... any --- @param ... any
printf=function(fmt, ...) end printf=function(fmt, ...) end
--- Gets input from fd
--- @param fd integer
--- @param helpstr string
--- @param replacechar string
--- @param fdo integer
userinput=function(fd, helpstr, replacechar, fdo) end
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "e83a8dc42a871c1e16cd56c214cf0ca4bb0079432dc8bd198abbe11d6cf31d4e", "hash": "e70a3cff68a821b6d1641553c2b1495e07930bcd5808db63e8768608a928339e",
"tarball": "http://localhost:8000/packages/raw/Hyperion-core.tar.xz" "tarball": "http://localhost:8000/packages/raw/Hyperion-core.tar.xz"
} }
+1 -1
View File
@@ -8,6 +8,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "f64be830fc02394eeb9c049a528ed47b97430c6682a577c789d16303dcaad6fc", "hash": "771fd62d79ff857a1ea1cf3caae340a40b08bc2330fcc6b012b9e07d001ddb45",
"tarball": "http://localhost:8000/packages/raw/Hyperion-firmware-ac.tar.xz" "tarball": "http://localhost:8000/packages/raw/Hyperion-firmware-ac.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "f3f030d6f6faa137f9950f0ce4ccc598a9b29c729380c100c920fad5aa254076", "hash": "f79a5a9f657acc72bb97c7731c06e366f4118c8d5d5324f8e35a958f95be2796",
"tarball": "http://localhost:8000/packages/raw/Hyperion-firmware-ccpc.tar.xz" "tarball": "http://localhost:8000/packages/raw/Hyperion-firmware-ccpc.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.3.0", "version": "1.3.0",
"hash": "dd69c26ba6f46acb99d6f839474fc50283524bd99df7f67a5d300a749af86dde", "hash": "c2b234005baa8bee1b753b96808f0b326a7f035d65e52295cb93320d5a397886",
"tarball": "http://localhost:8000/packages/raw/Hyperion-firmware-cct.tar.xz" "tarball": "http://localhost:8000/packages/raw/Hyperion-firmware-cct.tar.xz"
} }
+1 -1
View File
@@ -6,6 +6,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "0.1.0", "version": "0.1.0",
"hash": "8b1bbff272dd07f0e5023c90007ec8d3a84f5b29a59449a75894319c86ee10cd", "hash": "f7805a3934a09cc3384d82a20ade2adc81afa3e403055cda191bf5cdc31bcc2b",
"tarball": "http://localhost:8000/packages/raw/Hyperion-firmware-oc.tar.xz" "tarball": "http://localhost:8000/packages/raw/Hyperion-firmware-oc.tar.xz"
} }
+1 -1
View File
@@ -8,6 +8,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.5.0", "version": "1.5.0",
"hash": "a17552597f1a4e661804bcf23d26e19664cb6f75cb3058357603df59b033155a", "hash": "68b8f1ae21a62e627bad1187b828c959c93454d1b75a29db00a1a31b187796d0",
"tarball": "http://localhost:8000/packages/raw/Hyperion-kernel.tar.xz" "tarball": "http://localhost:8000/packages/raw/Hyperion-kernel.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "9bc32da8ab97f899e85faeb47064433ef4a167e45924c0e583d30f901551bdf5", "hash": "a92fbf2d886c1ee965b1d34aed8bcf5294d97fd0f55a981e82ba5d17171e99e9",
"tarball": "http://localhost:8000/packages/raw/bit32.tar.xz" "tarball": "http://localhost:8000/packages/raw/bit32.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "c32e2bbeba5d8609f720bce59fad0505d490ee22a6e54b4d830a524e609ac415", "hash": "2ee62a46d32e3d302453d4cb04ac8af72771645b8120e1d827eeb47b599eb192",
"tarball": "http://localhost:8000/packages/raw/blake2s.tar.xz" "tarball": "http://localhost:8000/packages/raw/blake2s.tar.xz"
} }
+1 -1
View File
@@ -8,6 +8,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "c52244c7fd2ca96780ed684327ebb55872757a4f6c8d90e18367ec4e0d8f10ad", "hash": "dc2b541f3b9eaf8f0fd41afdaef95d2a2c37a05c01e1e6143dd0d17380f75340",
"tarball": "http://localhost:8000/packages/raw/coreutils.tar.xz" "tarball": "http://localhost:8000/packages/raw/coreutils.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0-release", "version": "1.0.0-release",
"hash": "43a3df0e6da39aa97c0ee0ce4217e9acffadba4178d03dae5c66bf4627147644", "hash": "e35f29c486d4a002e46b5c4e85676c480310829b606fc72d093ed86e7daab91d",
"tarball": "http://localhost:8000/packages/raw/deflate.tar.xz" "tarball": "http://localhost:8000/packages/raw/deflate.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "88eb9f9bb7bb86fb7752601c67e4ab62e88fb7562057a83c101aaf7ffc3ccdc0", "hash": "73515e60e945b7dc9e5adb34db499e52cec9a44ff688d30ce7600025572a3e4c",
"tarball": "http://localhost:8000/packages/raw/gfxterm.tar.xz" "tarball": "http://localhost:8000/packages/raw/gfxterm.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.3.0", "version": "1.3.0",
"hash": "d0baaeb889eeaa38a9f100c4954b8f30c36c220ba73d8b8fa878e0fcaeaadb15", "hash": "f01bd72d19c57a3a12c940fb2fd8d09b53a47eb857e09ecbca6464199dba35ae",
"tarball": "http://localhost:8000/packages/raw/hysh.tar.xz" "tarball": "http://localhost:8000/packages/raw/hysh.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "f26f900027066dc2f498a4ccb8306f48c93210e7869b11f4aef9900f2e00e066", "hash": "6a883872f8f1db19617b99aae58358dc603f54801b7cde035b603773f03c7ca1",
"tarball": "http://localhost:8000/packages/raw/iniparse.tar.xz" "tarball": "http://localhost:8000/packages/raw/iniparse.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "8623a44260062d0066aecc683b45c2ea9e6f438fd74cef050e7bcac7daa33a4f", "hash": "3d57052898dfbfcb645cc407523702d4df91675a17bd04754b6494c3e9d2a53b",
"tarball": "http://localhost:8000/packages/raw/installer.tar.xz" "tarball": "http://localhost:8000/packages/raw/installer.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "8344035d687f5cafb8c918d6bddd2ba5a7d6c2025aa43def84b942a614583282", "hash": "f27f343ab85bb4dc8bd0ee6882a01aaaceeb38c791f672b54c2f1d6e80d4287e",
"tarball": "http://localhost:8000/packages/raw/json.tar.xz" "tarball": "http://localhost:8000/packages/raw/json.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.2.0", "version": "1.2.0",
"hash": "69978317dbe981a50aa3194ed68d35bbd4d1e87ba03191aa7b3574712861e54c", "hash": "0ce3793bcef753f01ced1d5db88f39840ffbbd15eb485e32ebfc9191f0f67360",
"tarball": "http://localhost:8000/packages/raw/lua.tar.xz" "tarball": "http://localhost:8000/packages/raw/lua.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "20619f7885c20cef538842ad1a958dd5dfbd9a3542997acd7de91f89e57e32db", "hash": "cb53fe713bb74dc76f66bac0d856525ab4aeb9ab9ac1c09ca1a674ad646378fd",
"tarball": "http://localhost:8000/packages/raw/micro.tar.xz" "tarball": "http://localhost:8000/packages/raw/micro.tar.xz"
} }
+1 -1
View File
@@ -8,6 +8,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "bbbc1c2137b76aec328bf8cc0d246f852af35943175fbcd8e1bf55fc9348e4ba", "hash": "47f8e1658373657131d514af623e7cf74fdc3165e8d4c05634fd064eb1217ef8",
"tarball": "http://localhost:8000/packages/raw/minify.tar.xz" "tarball": "http://localhost:8000/packages/raw/minify.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "b1941d2a2699774ab94886d866198219608544f63bee6cf2f059d5b1ed9c86e8", "hash": "6736ecf743bbe3a09c223c7f73d5247056a103ec334813ada62f9bd50720f412",
"tarball": "http://localhost:8000/packages/raw/pid.tar.xz" "tarball": "http://localhost:8000/packages/raw/pid.tar.xz"
} }
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+6 -2
View File
@@ -5,8 +5,12 @@
"Hyperion", "Hyperion",
"Astronand" "Astronand"
], ],
"dependencies": [], "dependencies": [
"tar",
"deflate",
"json"
],
"version": "1.0.0", "version": "1.0.0",
"hash": "55f9a95f5fd032f6a9ad27c9528987f9051554d506f1dddb4494daf822db5e1b", "hash": "26d7cf304ad0bc36fbfa80af1b7af957de29a6c233e6d8a302b2b562f78326db",
"tarball": "http://localhost:8000/packages/raw/spm.tar.xz" "tarball": "http://localhost:8000/packages/raw/spm.tar.xz"
} }
+1 -1
View File
@@ -7,6 +7,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.1.0", "version": "1.1.0",
"hash": "f4a3947d96d85bae5c43342567ed87fae99d1f4e692e99f42df8cec7cb556451", "hash": "379cae7a2c42b5b0c30476c7660148c60ac426664627c649060c8feca01aa33f",
"tarball": "http://localhost:8000/packages/raw/sysinit.tar.xz" "tarball": "http://localhost:8000/packages/raw/sysinit.tar.xz"
} }
+12
View File
@@ -0,0 +1,12 @@
{
"id": "tar",
"description": "",
"authors": [
"Hyperion",
"Astronand"
],
"dependencies": [],
"version": "",
"hash": "2549429f0686c88354b091cbbd0cd7f80148115178cb3e5198924de28c7da6f4",
"tarball": "http://localhost:8000/packages/raw/tar.tar.xz"
}
+1 -1
View File
@@ -10,6 +10,6 @@
], ],
"dependencies": [], "dependencies": [],
"version": "1.0.0", "version": "1.0.0",
"hash": "1b5d564b4fea1af5a5e3fde1790298b9f9e7182ad2697b936bc551acffa2beef", "hash": "38422b0eb99cef1122d4aeb3472e705ba304f58713280449bd3a6a492bacd521",
"tarball": "http://localhost:8000/packages/raw/xz.tar.xz" "tarball": "http://localhost:8000/packages/raw/xz.tar.xz"
} }
+5 -2
View File
@@ -21,12 +21,15 @@
"pid": "http://localhost:8000/packages/pid.pkg", "pid": "http://localhost:8000/packages/pid.pkg",
"spm": "http://localhost:8000/packages/spm.pkg", "spm": "http://localhost:8000/packages/spm.pkg",
"sysinit": "http://localhost:8000/packages/sysinit.pkg", "sysinit": "http://localhost:8000/packages/sysinit.pkg",
"tar": "http://localhost:8000/packages/tar.pkg",
"xz": "http://localhost:8000/packages/xz.pkg" "xz": "http://localhost:8000/packages/xz.pkg"
}, },
"refs": [ "refs": [
"https://git.astronand.dev/Astronand/HyperionOS-packages/raw/branch/main/spm.json" "https://git.astronand.dev/Astronand/HyperionOS-packages/raw/branch/main/spm.json",
"http://localhost:8001/spm.json"
], ],
"maintainers": [ "maintainers": [
"Hyperion" "Hyperion"
] ],
"self": "http://localhost:8000/spm.json"
} }