Hello, I just discovered this conference:
Anyone wants to prepare a talk about Haiku package system and/or haikuports?
Applications are open until 31 of August. The conference itself is in November.
Hello, I just discovered this conference:
Anyone wants to prepare a talk about Haiku package system and/or haikuports?
Applications are open until 31 of August. The conference itself is in November.
I’m interested! Looks like fun, and a great way to tell more people about Haiku.
So I’m thinking of submitting a proposal for a 20 minute talk which highlights:
Anyone interested to join in? A 30 minute session has 20 minutes of pre-recorded video, and 10 minute Q&A. Or have a 2 minute lighting talk.
My abstract for PackagingCon was accepted! I’ll be taking about the Haiku packing system, and focusing on:
Anything else I could highlight? Anyone want to contribute?
Cool!
You might want to look at previous talks for hints… I had one at FOSDEM in 2016 (hmm no video, IIRC the recording was broken), but likely there are more up-to-date things around.
I’ll check it out. I definitely want to get smarter on the topic.
Some cool things to mention:
command-not-found
on Haiku trivial (it does not need to check which package the command is in)Draft presentation for review: http://files.richardzak.md/HaikuPackageCon2021_draft.pdf
Any feedback would be appreciated! Thanks!
Maybe add a note on how to create recipes (some quick guide or link on the howto)? .PackageInfo
contains almost the same information as a reccipe
does if you do it manually.
I know, this is only a draft, but after you added 2 more pages for creating a package in Haiku, you ended with pages 14/13 and 15/13 (still counts total pages as 13).
There are several possible directions to dig further into I can think of, not sure how far you want to go
A bit more history of how we decided to create this package manager:
On the technical side:
More “cool features” (you already gave a good overview of the most important ones I think):
Nice work.
On the Metadata in Packages page, I found bullet point number three a little awkward and hard to understand.
Other packages, and the command line, can specify dependencies on
by referring to the the library name or command without having to
specify which package exactly.
Great idea, I’ll add some recipe information.
That’s because those slides at the end are intended to be an appendix, to be covered if I don’t run out of time, or if there are questions relating to those items.
Thanks! I’ll see how I can reword that.
It means you dont need to know the name of the “fancynamedpackage” to install it, it is enough if you know for example the name of the command you need.
So instead of
pkgman install imagemagick7
You can say
pkgman install cmd:convert
Comfy, heh?
- So to regurgitate: because the packages are on the disk, it’s easy to provide said packages to someone else in an off-line environment, and all dependencies are guaranteed to be present on the host machine?
Yes. That is the main point of free/libre software, yet the typical Linux way makes it complicated, and centralizes the software distribution in the hands of distros.
- What should be mentioned about libsolv in regards to Haiku?
Nothing special, just mention that we didn’t reinvent the wheel on everything and the Linux package managers do get some things right
- Great info to random access to the archive, I’ve never heard of this before.
If you want to dive into details, there’s this: Haiku Package File Format — Haiku internals documentation but I don’t think it provides a good overview of the “why”.
For the history of how we got where we are, there is this page Package Management Ideas — Haiku internals documentation with brainstorming notes from the development team (not everything went in the final implementation).
- Could you elaborate by what is meant by reusing the packages in a separate mount point? Do you mean like a chroot/jail environment?
Yes, in haikuporter this is used with a chroot, but it could also be used without one, just like python does with virtualenv. The idea is to mount a packagefs in some directory, and then adjust some variables (PATH, LIBRARY_PATH and ADDON_PATH mainly) to make the mounted packages “visible” in a shell session. So you could keep the environment for a specific project this way.
You can find the package backups in /system/packages/administrative/state-* (the directory name is a timestamp of when the state was created). A new state directory is created for each operation (install, uninstall, …). The directory contains a list of activated packages in a text file, and the packages necessary to rebuild this state from the previous (or next? I don’t remember which way this works) one. If you only ever add new packages, this takes almost no space (just the text file with the package list). If you remove packages, they are kept there so no space is freed. If you update packages, this is the worst case since both the old (in the state directory) and new (in the active /system/packages) versions are kept.
You can delete the states when you don’t need them anymore. Currently that’s not automated, but some 3rd party app can help with cleaning them up. We may add this to the OS someday if we can decide what the right rules are for automatic deletion. I think you can only safely delete the oldest states, if you leave gaps between the current state and an older one, you may end up missing some data to reactivate that older package.
It will be recorded and hopefully available shortly after. When I have more info I’ll share. I’ll also post the slides.
Edit: There was an interesting talk just before I spoke about Haiku on a project called Distri (video), which is a package manager which mounts files into a read-only space to save installation time and reduce package complexity. Sound familiar?
Well done!
I thought you did an excellent job presenting the packaging system! The Q&A voices at the end sounded robotic! Thank you for doing this!