Tuesday, September 05, 2023
apps@conference.yunohost.org
September
Mon Tue Wed Thu Fri Sat Sun
        1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
             

[11:19:51] <Solrac> Hello! Im having a bit of trouble understanding what went wrong here. Fail2ban failed?
https://paste.yunohost.org/raw/yigecitaye
[11:21:08] <lapineige> Either the regex is wrong or the lack of log make it fail ?
[12:21:08] <lapineige> ok 🙂
[12:21:34] <Tag> Mais je ne sais pas quelle serait la bonne solution pour ça... là ça oblige implicitement les utilisateurs de gotify à avoir les mêmes identifiants/mot de passe que ceux de YunoHost
[12:23:12] <Tag> Pas une bonne idée à mon avis, ça forcerait à stocker le mot de passe en clair dans le config.yaml, si tant est qu'on puisse le récupérer...
[14:35:17] <lapineige> Is there some guidelines / standard / best pratices for packaging a python app ?
[14:35:32] <Salamandar> (i’m working on it just right now)
[14:35:34] <Salamandar> i’d say use a venv
[14:35:34] <lapineige> I was wondering about this precise one. Even in v2, there is a lot of custom helpers
[14:35:35] <Salamandar> see the ihatemoney app, it’s pretty OK
[14:35:41] <lapineige> That's the current status then ?
[14:36:25] <Salamandar> also I see https://github.com/YunoHost-Apps/django_example_ynh
[14:37:19] <Salamandar> I’d say paperless-ngx_ynh is kinda ok too
[14:37:20] <Salamandar> what do you mean ?
[14:38:19] <Salamandar> I think there’s still an issue when moving from python3.x to python3.y, the venvs keep a symlink to the previous version so they are broken
[14:38:38] <Salamandar> (issue only found when upgrading from Debian release to another)
[15:01:44] <Solrac> > <@lsolrac:matrix.org> Hello! Im having a bit of trouble understanding what went wrong here. Fail2ban failed?
> https://paste.yunohost.org/raw/yigecitaye

For Context; Fail2Ban failed
[15:02:19] <Solrac> > Either the regex is wrong or the lack of log make it fail ?

regex where though? And which log would it be looking for?
[15:06:28] <lapineige> Wait, I took a took hasty look : it's easier `fail2ban-client[364446]: No failure-id group in '\''Regex to match into the log for a failed login'\''` There is no regex defined, it's a placeholder.
[15:07:33] <lapineige> Where is motion app code located ? It's not in YunohostApps
[15:07:44] <lapineige> Where is motion app code located ?
[15:07:44] <lapineige> Where is motion app code located ? It's not in Yunohost-Apps
[15:07:58] <Solrac> I used the default /var/www/(app)
[15:09:05] <Solrac> https://github.com/SolAZDev/motioneye_ynh source is here just in case
[15:09:18] <Tag> Solrac: You're missing the <HOST> part in the failregex argument. See exemples here: https://grep.app/search?q=ynh_add_fail2ban_config&filter[repo.pattern][0]=yunohost-apps
[15:09:43] <lapineige> > <@lsolrac:matrix.org> https://github.com/SolAZDev/motioneye_ynh source is here just in case

Oh so it's not in the app catalog and so on I guess ?
[15:09:51] <Tag> You should either edit/remove/comment this line https://github.com/SolAZDev/motioneye_ynh/blob/master/scripts/install#L114-L114C24
[15:10:02] <Solrac> > Oh so it's not in the app catalog and so on I guess ?

Not yet
[15:10:25] <Tag> Solrac: Also you should consider transfering the repo to the YunoHost-Apps organization, even if it's not finished. You'll be granted to use the CI :)
[15:10:38] <lapineige> > <@tag:lostpod.me> Solrac: You're missing the <HOST> part in the failregex argument. See exemples here: https://grep.app/search?q=ynh_add_fail2ban_config&filter[repo.pattern][0]=yunohost-apps

If you want to complete it, you need a know what's the log line if there is a failed login attempt. In that case it looks that Nginx logs, so it should be pretty standard.
But I'd advice that you comment the line, install the app, do a failed login attempt, then use this in the regex for fail2ban
[15:11:34] <lapineige> Which basically speeds up your packaging by a lot, as you don't need to manually install the app all the time. It's also more secure since the package is not finished, no big mistake could lead to breaking your system
[15:12:36] <Solrac> > <@tag:lostpod.me> Solrac: Also you should consider transfering the repo to the YunoHost-Apps organization, even if it's not finished. You'll be granted to use the CI :)

I can? 😲
[15:12:37] <lapineige> > <@lsolrac:matrix.org> I can? 😲

Yes, it's made for that 🙂
[15:12:37] <Solrac> > <@tag:lostpod.me> Solrac: You're missing the <HOST> part in the failregex argument. See exemples here: https://grep.app/search?q=ynh_add_fail2ban_config&filter[repo.pattern][0]=yunohost-apps

this forked out of the example app. 🤔 should it not be fixed there as well?
[15:12:41] <lapineige> it's a placeholder, that packagers are supposed to replace 🙂 (`Regex to match into the log for a failed login`)
[15:14:00] <lapineige> See https://yunohost.org/fr/packaging_apps_helpers#fail2ban
[15:14:05] <lapineige> (The helpers list is your bible 😉)
[15:16:51] <lapineige> > <@Salamandar:matrix.org> what do you mean ?

I wonder if these custom helpers are what's currently the best packaging for python app we have, as there doesn't seem to have yunohost helpers to manage python dependencies, venv and so on. They look more complex than the basic `venv activate` and `pip install requirements`, at first look I can't judge if it's better to use them than the basic stuff, that's why I was curios to know if I should reproduce those helpers or keep it simpler.
Thanks for the references 🙂
[15:17:18] <Tag> > <@lsolrac:matrix.org> I can? 😲

I sent you an invitation. Once accepted, you can request the transfert (bottom of the settings page on your repository)
[15:23:10] <lapineige> > <@Salamandar:matrix.org> I think there’s still an issue when moving from python3.x to python3.y, the venvs keep a symlink to the previous version so they are broken

Oh I see, hence the fix https://github.com/YunoHost-Apps/django_example_ynh/blob/master/scripts/_common.sh#L42
[15:23:56] <lapineige> > <@tag:lostpod.me> I sent you an invitation. Once accepted, you can request the transfert (bottom of the settings page on your repository)

*advertisment music* "Welcome in the world of Yunohost" 😁
[15:33:09] <Aleks (he/him/il/lui)> > *advertisment music* "Welcome in the world of Yunohost" 😁

https://sans-nuage.fr/file/s/i6YBskTiYZc6RKe 👀
[15:34:00] <Salamandar> > I wonder if these custom helpers are what's currently the best packaging for python app we have, as there doesn't seem to have yunohost helpers to manage python dependencies, venv and so on. They look more complex than the basic `venv activate` and `pip install requirements`, at first look I can't judge if it's better to use them than the basic stuff, that's why I was curios to know if I should reproduce those helpers or keep it simpler.
> Thanks for the references 🙂

we should talk about yunohost internal helpers indeed
[15:35:48] <lapineige> It would be create to write one, but as it doesn't exist yet I'm searching for what I should copy-paste from another script 🙂
[15:36:21] <lapineige> (it's for the app generator)
[15:36:21] <lapineige> > <@Alekswag:matrix.org> https://sans-nuage.fr/file/s/i6YBskTiYZc6RKe 👀

you didn't write a bot to post them here each time you write *thememename.gif* yet ? 😁
[15:36:26] <Aleks (he/him/il/lui)> we should definitely do that
[15:36:33] <Aleks (he/him/il/lui)> ogod
[15:36:35] <lapineige> Don't thank me for your next sleeping hours that just disappeared 😁
[15:44:42] <lapineige> Just discovered the "subdirs" option in the manifest option of data_dir (here https://github.com/YunoHost-Apps/paperless-ngx_ynh/blob/master/manifest.toml#L68C25-L69C43).
We should make a mème for that experience, each time a Yunohost packager discover a new packaging magical trick \o/
[15:45:02] <lapineige> (Can I say all of this would be really great as a placeholder comment in the example_ynh ? 😄)
[15:46:35] <lapineige> So we have another option in the app generator 😄 - I'm gonna catch them all 😈
[15:46:45] <Aleks (he/him/il/lui)> maybe but at some point we gotta choose what to include and what to not include in example_ynh, otherwise it just turns into a big ass documentation-yet-sort-of-package
[15:48:02] <lapineige> Yeah I imagine that. And I believe the app generator can help to solve (partly) this discoverability issue 🙂 (for instance here if you tick "I need a data directory" you get prompted to add subdirs if needed.
[15:48:30] <lapineige> So we have another option in the app generator 😄 - I'm gonna gatch them all 😈
[15:51:10] <lapineige> But we are likely to be limited again at some point… At least it will allow to expose a lot more possibilities (I believe) at a low cost (namely = not a book of comments in each file).
[15:51:53] <lapineige> But we are likely to be limited again at some point… At least it will allow to expose a lot more possibilities (I believe) at a low cost (namely : not a book of comments in each file).
[15:52:52] <lapineige> It could improve the compromise between "better packaging by default and with less learning" and "having a big barrier when doing the first package as it's too many stuff to read and edit at once".
[15:52:53] <lapineige> I also wonder how it can be mixed with the documentation in some way, like having tooltips that you could expand for roughly each option, that would explain how to fill it and when/why, and maybe link to the documentation.
It's on the to-design-and-to-do list 😄
[15:57:52] <Solrac> > <@tag:lostpod.me> I sent you an invitation. Once accepted, you can request the transfert (bottom of the settings page on your repository)

I accepted and began the transfer
[15:57:56] <lapineige> It's too late 😈
You're in 😁
[15:58:28] <Aleks (he/him/il/lui)> 661 👀
[15:58:54] <Solrac> I was in before I knew
[16:10:58] <lapineige> `!testme` in a PR (it will be listed in the first post template 🙂)
[16:10:58] <Solrac> I made a commit to update the screenshot, however, how can I trigger CI to test?
[16:10:59] <Solrac> So I'll be making PRs for Updates?
[16:11:37] <lapineige> It's best pratice to setup a testing branch, in addition to the master one. (oh ok, Tag took a short-circuit :D)
And then you create a PR from testing to master, trigger CI, do some manual testing, advice people to test it… when it's ready, you merge it 🙂
[16:11:39] <lapineige> But if it's only for the documentation, there is no need 🙂, it doesn't change anything during install & so on
[16:11:54] <Solrac> 👌 tyty
[16:11:58] <lapineige> "!testme" in a PR (it will be listed in the first post template 🙂)
[16:12:07] <lapineige> enjoy 🙂
[16:12:25] <Tag> I suggest you create a testing branch, commit on this branch and create a PR
[16:56:14] <Solrac> Error 500, lets gooo github
[16:59:06] <Solrac> is anyone else getting err 500 when trying to do a PR?
[17:00:00] <lapineige> Refresh the page and the cache maybe ?
[17:00:01] <lapineige> I don't think so (I didn't confirm to avoid generating noise)
[17:04:31] <Yunohost Git/Infra notifications> [apps] @alexAubin edited [pull request #1717](https://github.com/YunoHost/apps/pull/1717): New app store
[17:04:37] <Yunohost Git/Infra notifications> [apps] @alexAubin pushed 1 commit to app-store: appstore: add install with yunohost button ([e9923e55](https://github.com/YunoHost/apps/commit/e9923e55f3045648b3b235ebee2c6bcf7a9e2d7d))
[17:04:37] <Solrac> https://twitter.com/githubstatus/status/1699097986016456870
[17:04:44] <Yunohost Git/Infra notifications> [apps] @alexAubin pushed 1 commit to app-store: appstore: implement voting on wishlist ([fdad58a4](https://github.com/YunoHost/apps/commit/fdad58a45d673ae950e45b44ac4b2bbcc1021154))
[17:04:46] <Solrac> `$final_path` is unbound, how can I bind it? 🤔 I thought it was automatically bound from the install configs, or maybe its me being a silly
[17:05:14] <lapineige> Are you using packaging v2 ?
Then it's `$install_dir` now. And `data_dir` if you use the data directory (/home/yunohost.app/yourapp)
[17:07:24] <Solrac> Aw heck.
[17:07:58] <Solrac> I did partly based myself on a package that was using v1
[17:13:12] <lapineige> yeah, these subtle changes can be troublesome ^^
[17:15:49] <lapineige> but the linter in CI will tell you 😉
[17:18:02] <Solrac> I have a small todo list I'd like to make, but motion eye uses /var/lib/motioneye for saving media, can it be safe to assume I can reference `data_dir` in a .conf file?
[17:18:21] <lapineige> As long as motioneye allow you to change the media directory to something else (in either way, config file, command parameter…), yes, use `data_dir`. For instance `__DATA_DIR__` in the config file, it will be replaced automagically 🙂
[17:22:03] <Solrac> The config file allows it as far as I can see; but would
/home/yunohost.app/yourapp/(media, logs, etc)
be a good idea?
[17:22:09] <lapineige> yes
[17:23:07] <lapineige> it's made for that 🙂
[17:24:16] <lapineige> It could be placed almost anywhere, it's just standard good pratice 🙂
[17:24:28] <Solrac> 👌
[17:25:32] <Solrac> it's bad practice by all means, but some motionEye issues reference a `@admin_password` on the config file, could I refference `__ADMIN_PASSWORD__` the same way?
[17:25:34] <Solrac> or I assume maybe `__APP_PASSWORD__`
[17:25:44] <lapineige> `__ADMIN_PASSWORD__` is fine, just define it in the manifest (I think example_ynh does it, if not, see the doc 🙂).
Maybe in the tooltip you can make it clear it's written in clear in the config file (even if no other app will have the right to read it).
[17:40:51] <Salamandar> same goes with the yunohost configuration
[17:40:52] <Salamandar> well it's not "so" bad practice @Solrac, the config file should only be visible as the app user or as admin
[17:41:22] <Solrac> > `__ADMIN_PASSWORD__` is fine, just define it in the manifest (I think example\_ynh does it, if not, see the doc 🙂).
> Maybe in the tooltip you can make it clear it's written in clear in the config file (even if no other app will have the right to read it, people will be aware).

I was thinking `install.password` would define it, no? if so, is it just `__INSTALL_PASSWORD__`?
[17:42:20] <Solrac> > <@Salamandar:matrix.org> well it's not "so" bad practice @Solrac, the config file should only be visible as the app user or as admin

technically correct, but I suspect it'll be rawtext
[17:50:26] <Tag> aah sorry I messed up
[17:50:48] <Tag> also if it make more sense to name it `admin_password` (let's say it's how that's called in the config file), just name it that way :)
[17:52:04] <Solrac> I was reffering to the [install.password] on the template
[17:53:13] <lapineige> Yeah my bad I forgot that was a subcategory of install
[17:53:33] <Tag> install.password will translate as `__PASSWORD__` in the config file, and `password` in the bash script
[18:03:03] <Solrac> New error 🎉 Where do the sources download to if not $install_dir? Because it can't find it 🤔
[18:03:11] <Aleks (he/him/il/lui)> can you explain why you care where the sources are downloaded to 😬
[18:03:13] <Aleks (he/him/il/lui)> they are downloaded to some cache which is then grabbed by `ynh_setup_source`
[18:03:16] <Aleks (he/him/il/lui)> yeah all your sources are commented in the manifest.toml
[18:03:19] <Aleks (he/him/il/lui)> so there's like ... nothing to download
[18:03:21] <Solrac> > <@Alekswag:matrix.org> can you explain why you care where the sources are downloaded to 😬

https://ci-apps-dev.yunohost.org/ci/job/9336
`161273 WARNING ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/var/www/motioneye/dev.tar.gz'`
[18:03:31] <Aleks (he/him/il/lui)> i don't understand 😅
[18:03:35] <Aleks (he/him/il/lui)> eeeeh
[18:03:35] <Solrac> > <@Alekswag:matrix.org> they are downloaded to some cache which is then grabbed by `ynh_setup_source`

Yes, but look at the previous one 😲 I did that cause I thought I could bypass getting the files
[18:03:35] <Solrac> I'll undo and re-ci so you can see it
[18:03:40] <Aleks (he/him/il/lui)> why do you want to ... bypass getting the files ? 🤔
[18:03:41] <Aleks (he/him/il/lui)> ok
[18:03:56] <lapineige> Do you download the source code at some point ?
If not, why ?
If yes, why not in manifest ?
[18:32:09] <Solrac> Sorry for the delay
[18:33:04] <Solrac> https://ci-apps-dev.yunohost.org/ci/job/9338 No idea why but the sources worked? 🤔
[18:35:32] <Solrac> > Do you download the source code at some point ?
> If not, why ?
> If yes, why not in manifest ?

Were you reffering to the dev.tar.gz? In that case, It's MotionEye's python3 version's install instructions, admitedly, not a fan. Kinda wish they did releases so I can use a specific version rather than a specific commit.
[18:39:57] <lapineige> no I mean, you use the dev.tar.gz, right ?
[18:47:11] <Yunohost Git/Infra notifications> [apps] @alexAubin pushed 1 commit to app-store: appstore: initialize i18n stuff ([55e0a098](https://github.com/YunoHost/apps/commit/55e0a098ef3a0ffadfe4ce44fe26dcac490d9c43))
[18:47:31] <Yunohost Git/Infra notifications> [apps] @alexAubin edited [pull request #1717](https://github.com/YunoHost/apps/pull/1717): New app store
[18:50:39] <Solrac> > no I mean, you use the dev.tar.gz, right ?

Yes. As the install instructions suggest. (They say to `pip3 install (dev.tar.gz url)`
[18:53:48] <lapineige> Oh, ok…
Then I would prefer to rely on Yunohost mecanism to download the source, check the sha256sum, and leave it there (without extracting it), and then you `pip3 install dev.tar.gz` in the `install_dir` folder.
[18:54:25] <Solrac> That is exactly what I am doing
[18:54:40] <lapineige> > <@Alekswag:matrix.org> yeah all your sources are commented in the manifest.toml

Ok so this ↑ is uncommented ?
[18:55:08] <Solrac> That is correct.
[18:55:26] <lapineige> Cool 🙂
[18:56:17] <Solrac> I only commented it because _one_ CI said it couldn't find the file. So I tried chaning `pip3 install dev.tar.gz` to `pip3 install (git url)`
[18:56:44] <Aleks (he/him/il/lui)> I'm confused about what the `pip install` achieves...
[18:56:45] <Aleks (he/him/il/lui)> hmm it's still a bit confusing tho ... there is indeed a `ynh_setup_source` to deploy the source in `$install_dir`, but then there's a `pip install <url>` after anyway ? https://github.com/YunoHost-Apps/motioneye_ynh/blob/solazdev_testing/scripts/install#L175
[18:56:59] <Solrac> Oh :^) So the change wasnt included? brb fixing it
[18:57:04] <lapineige> > So I tried chaning pip3 install dev.tar.gz to pip3 install (git url)

Yeah so please don't directly install from URL. There is no security check that the file is the right one (the sha256sum) if pip downloads it directly
[18:59:55] <Aleks (he/him/il/lui)> aaamd what's also confusing is to use the archive from the `dev` branch instead of, say, a specific tag or commit ... like, the checksum for the `dev` branch is of course valid right now, but will break as soon as some dev pushes to the `dev` branch
[19:02:01] <Aleks (he/him/il/lui)> ah yeah they don't seem to be doing any more tagging/release hmpf
[19:02:16] <Aleks (he/him/il/lui)> but still a specific commit could be used
[19:02:34] <lapineige> oh yeah, it's better to use a commit reference (as explained above ↑)
[19:03:00] <Solrac> > <@Alekswag:matrix.org> aaamd what's also confusing is to use the archive from the `dev` branch instead of, say, a specific tag or commit ... like, the checksum for the `dev` branch is of course valid right now, but will break as soon as some dev pushes to the `dev` branch

This is exactly my concern. A release would be much betterr
[19:03:05] <Solrac> > oh yeah, it's better to use a commit reference (as explained above ↑)

and only update once a commit is considered stable enough?
[19:06:00] <Yunohost Git/Infra notifications> [apps] @alexAubin pushed 1 commit to app-store: appstore: fix i18n for description/pre_install notification ([62f246fb](https://github.com/YunoHost/apps/commit/62f246fba4ddfd7826b55b1b5dce6c0fe78f4496))
[19:06:05] <lapineige> if you the dev branch latest archive, once a single commit is done, you're sha256sum is invalid, and installs can't be done. It will be a pain
[19:06:54] <lapineige> For instance. Not ideal, but yet…
[19:07:10] <Solrac> yep
[19:07:17] <Solrac> How does one "download" a specific commit though?
[19:07:19] <Solrac> Oh neat o:
[19:07:19] <lapineige> see the post I'm answering to right above 🙂
[19:07:19] <lapineige> see the post I'm awnsering to right above 🙂
[19:07:21] <Aleks (he/him/il/lui)> you gotta "Browse files" for the specific commit, then the green "Code" button -> Download as zip (for example)
[19:07:31] <Solrac> Then is there a way to remane a downloaded file in the manifest?
[19:07:33] <Solrac> or a variable so it can be referenced?
[19:07:34] <Aleks (he/him/il/lui)> and what's also painful with the lack of tag/release is that you gotta create your own version ... like one thing you can do is use `0.YYYY.MM.DD` as version ... with YYYY.MM.DD being the date of the commit
[19:09:08] <Aleks (he/him/il/lui)> see `extract` and `rename` in here : https://yunohost.org/fr/packaging_apps_resources#sources
[19:09:10] <Aleks (he/him/il/lui)> > <@lsolrac:matrix.org> Then is there a way to remane a downloaded file in the manifest?

if you want avoid extracting the .zip/.tar.gz into the destination, you specify `extract = false` near the source in the manifest, then it will only copy the file and it'll be named uuuuh
[19:09:10] <Solrac> > <@Alekswag:matrix.org> and what's also painful with the lack of tag/release is that you gotta create your own version ... like one thing you can do is use `0.YYYY.MM.DD` as version ... with YYYY.MM.DD being the date of the commit

Yep :^) Which is why I was wondering about variables, to attempt to reducxe verbosity though YYYY.MM.DD for the ynh side
[19:09:11] <lapineige> > <@Alekswag:matrix.org> if you want avoid extracting the .zip/.tar.gz into the destination, you specify `extract = false` near the source in the manifest, then it will only copy the file and it'll be named uuuuh

And you want that to install it with the pip command
[19:09:11] <Aleks (he/him/il/lui)> >When `extract = false`, the file will only be `mv`ed to the location, possibly renamed using the rename value
>`rename`: some string like `whatever_your_want`, to be used for convenience when `extract` is `false` and the default name of the file is not practical
[20:08:52] <Solrac> Updated to specific commit, changed for rename and no extraction, currently awaiting CI Job
[21:20:07] <Yunohost Git/Infra notifications> [apps] @ericgaspar pushed 1 commit to master: Create owncloud.png ([2ebfdd1e](https://github.com/YunoHost/apps/commit/2ebfdd1e16e04e84b8dbbf91940d3b26d6c53062))
[21:20:08] <eric_G> (the Go version)
[21:20:08] <eric_G> ownCloud is rather fast
[21:20:08] <lapineige> They rewriten it in Go ? O_O
[21:21:17] <Solrac> Is there a daily limit to CI? If so, can I do CI tests locally?
[21:21:20] <Aleks (he/him/il/lui)> others than that there's no theoretical limit
[21:21:20] <Aleks (he/him/il/lui)> but it requires lxd which is not something to yolo-install
[21:21:20] <Aleks (he/him/il/lui)> the limit is that it only runs 2~3 jobs at a time
[21:21:21] <Aleks (he/him/il/lui)> but yes you can also setup your own CI, yunorunner (= the stuff that run the CI) is actually packaged and in the catalog
[21:44:41] <lapineige> Can you explain why please ?
[21:59:01] <yunohelper> Hi! To help us volunteers help you, read about <a href="https://yunohost.org/en/community/help#how-to-ask-for-help">how to ask for help</a>.<br />Notably, contextualize your problem and explain it plainly.<br />Thank you for you patience, and thank you for using YunoHost!
[21:59:45] <Aleks (he/him/il/lui)> (ah, didnt meant to trigger the bot haha)
[22:18:52] <lapineige> I'm wondering why lxd is not something to yolo-install
[22:25:04] <Aleks (he/him/il/lui)> because it requires to mess with the network config and is a containerization solution, so if you're running in "exotic" conditions such as your server is already a LXC itself, or some funky arch / VM stuff, that may not work at best, or make your server explode at worst
[22:25:06] <Aleks (he/him/il/lui)> also because of the way LXC/LXD works, you may have to disable dnsmasq for your LXCs to obtain an IP address, that kind of stuff
[22:25:56] <Aleks (he/him/il/lui)> if your server is an appartment, installing a regular app is like adding a room or a furniture, but installing LXD is basically sub-renting your flat to other people
[22:46:36] <lapineige> Thanks :)