Re: Need Volunteers for Website Working Committee

"Stelian Ionescu" <[email protected]> Mon, 09 Oct 2023 20:51:48 -0400
Newsgroups gmane.lisp.common-lisp-net.devel
Message-ID <[email protected]>
>>> Yeah, currently we have ~450GB in filesystems,
>>> _used_ is only 111GB + 149GB = 260GB,
>>> so there's a bit of reserve left.
>> Given the above, how much disk do you reckon we'd need to run local 
>> RAID1?
>> And I assume it has to be two separate drives? 
>
> Yes -- your quoted Hetzner machine has 2x512GB,
> so it's good enough for a RAID1 (mirroring) and our current needs.
>
>
>>> I'd suggest to use Docker instead - according to our measurements,
>>> a VM layer costs 15-25% of performance,
>>> and having everything available in one filesystem makes backups much
>>> easier.
>> I can imagine if we have all the services Dockerized
>
> Hmm, I personally wouldn't do that.
> All the basic stuff (GitLab, MailMan, postfix [instead of exim], git,
> sshd access, ...) is IMO easier to administrate in one OS --
> even more so if it's something well-known like Debian stable.
>
> With all services docker you'll have to individually check them for
> security updates and so on.

Most likely not, because you'll only be using popular software that have well-maintained official images.

>
>
>> then in
>> principle, among other benefits, it should be easier to migrate to
>> different physical hosts in the future -- just push and pull
>> a Docker image.  Well, not really -- there will be loads of data to
>> go along with each Docker image and service, plus orchestration  to
>> be replicated on a new phycal host. But I think those are solved
>> problems and overall made easier by containerizing stuff -- at least
>> the local environment for each service isn't suddenly changing out
>> from under it by moving to a new physical host with a newer or
>> different Linux flavor. 
>
> Yeah, well, in the previous job we switched OS from Ubuntu to Redhat
> with barely an interruption for the service-VMs:
>
> http://web.archive.org/web/20160510131958/http://blogs.linbit.com/p/458/distribution-change-during-runtime/
>
> I'm not sure whether we want to have the complexity of an HA stack,
> though.
>> How about for Erik H's stated goal of being able to partition and
>> delegate maintenance of different services to different volunteers? 
>> In the case of VMs then each VM would literally have one volunteer
>> in charge of it.  Could we do similar with Docker deployment?
>
> I guess so.
>
>
>> In
>> that case, I'd expect the volunteer in charge of each Container to
>> become familiar (and practice doing) backup, migration, restore of
>> their particular container.
>
> More or less guaranteeing that at least 1 out of 10 has some kind of
> bug in the backup scripts, so we might lose data in a catastrophic
> event.
>
> I'd prefer having _one_ backup mechanism for everything --
> I quite like doing simple rsyncs to another host and doing btrfs
> snapshots on both sides.
>
>   [[ The current btrfs snapshot sending is bandwidth-optimal --
>      my fear is that when badly broken data gets sent this way
>      that _both_ side's filesystems become unavailable.
>      With rsync there's less coupling -- just the normal POSIX semantics. 
> ]]
>
>
>>   And For coordination of several
>> containers running our several services, do you think we could we
>> could use something simple such as docker-compose or would we better
>> resort to a "real" orchestration setup such as kubernetes?
>
> Ouch.
> No, please let's avoid the complexity.

For your case, K8s is a reasonably easy way to have HA without many issues.
You can go very cheap with 3 Hetzner hosts x 50 EUR per month, and use Ubuntu with MicroK8s on the hosts.

>
>> And given the services we are aiming to offer, do you think we are
>> talking about standard off-the-shelf Docker images (e.g. for gitlab,
>> nginx, etc) or are we looking at authoring and maintaining our own
>> custom images (i.e. our own Dockerfiles). 
>
> Yeah, exactly - the complexity starts creeping in.
>
>
> I guess I wasn't clear enough in my previous mail.
>
> _My_ idea (wish, recommendation, call it what you like) is a normal
> UNIX server with some system services[1] -- only in a few places I'd
> vote for Docker, like Mailman 2 (which isn't needed anymore, Erik
> already converted all the important mailing lists, right?!!),
> or when doing builds that require different userspace (like compiling
> SBCL for FreeBSD, or Windows, or Ubuntu, or RedHat.)
>
>
> Ad 1: When using systemd, we can use cgroups to isolate and limit
> their resource usage.
>
>
>
>>> We might need VMs for cross-builds anyway, though,
>>> if we want to support that at some time.
>>> (Or at least qemu-static-<arch> - might be easier to handle)
>> I'm not sure what qemu-static-<arch> means.
>
> https://github.com/multiarch/qemu-user-static
>      qemu-user-static is to enable an execution of different
>      multi-architecture containers by QEMU 1 and binfmt_misc
>
> My idea was that we might want to support building (and running tests
> for) SBCL for other architectures like eg. ARM64 on the machine as well
> (in the GitLab CI/CD pipelines).
>
> In the meantime it occurred to me that it might be simpler
> (though having an external dependency!) to ask for access to the gcc
> compile farm for that stuff.
>
>
>> What platforms would you have in mind to support for cross-builds? 
>
> Well, http://sbcl.org/platform-table.html lists
>
>      X86, AMD64, PPC, PPC64, PPC64le, SPARC, MIPSbe, MIPSle, ARMel,
>      ARMhf, ARM64, RISC-V32, RISC-V64
>
> but that might be a bit much ;)
>
>
>> I assume each platform would add to CPU/RAM/disk requirements. Query
>> whether to size for that eventuality now or later.
>
> Well, with qemu-user-static this would run "just" as a normal process
> (tree), like any other CI/CD job and in fact mostly started by GitLab
> pipelines -- and like anything in the gitlab pipeline it would/should
> have RAM/CPU limits configured.
>
>
>> Philip could you go ahead and set up one document for this migration
>> effort, in a place you find handy? If cryptpad will do what we need
>> for now then let it be cryptpad.  The cryptpad would be not such
>> much for discussion (this mailing list can play that role for now)
>> but more as a live to-do list with up to date status (I don't know
>> if that's formatted like an org-mode list or what). 
>
> Ack.
> I'll get back to this thread with a link when I have one.
>
>
>
>> In addition to HA (High Availability)
>
> HA adds complexity - and so adds to support load.
> I'm not sure we need it.

I'm not sure you can afford not to have som for of HA. common-lisp.net already has a reputation of poor reliability
and continuing on the same path doesn't seem a very good idea.
All the new lispers, and many of the old ones, have moved to other services (mostly Github) for good reasons.


>
> Perhaps the CL foundation wants to vote on it, though.
>
>
>> and external monitoring, I can
>> imagine just a couple reasons we might want to maintain separate
>> hosts:
>> 1. To have a dedicated build host just for running gitlab-runner and
>>    executors for it -- so that heavy pipeline jobs wouldn't bog down
>>    our whole server.
>
> An external host means additional dependencies - plus costs.
>
> I'd rather have gitlab jobs run in a cgroup hierarchy that is
> restricted so that it _can't_ bog down the main services.
>
>
> But a backup machine (which might also run monitoring of the main
> host) would be a requirement anyway.
>
>
>>    That brings up the question of do we still
>>    support shell logins into the base OS (as we do now) for users as
>>    well as administrators?
>
> I believe that is a nice feature - even more so if we provide a few
> foreign architecture filesystems that people can use for qemu-static
> emulation.
>
>
>>    And do we still enable the "shell"
>>    executor for gitlab-runner, if everything is supposed to be
>>    dockerized and we're trying to avoid running things on the bare
>>    base OS?
>
> Hmmm, that's a good question.
> Having _every_ gitlab job in a docker means that these become
> independent from our host OS -- so we can upgrade packages as needed
> (security fixes, feature updates!) without impacting any CI/CD
> pipeline.
>
>
>>  2. Maybe for a dedicated gitlab host as well, because that program
>> is so freaking heavy.

I suggest switching to a lighter-weight alternative like Gitea or, even better, bailing out of source hosting altogether.
It take a lot of work to provide a capable service, which volunteers can hardly provide.

>
> Cost?
>
>
>>  3. And we might want hosts of different architectures, even Mac & 
>> Windows.
>
> How about the GCC build farm?
>
> My idea for building Windows binaries for SBCL would be via using WINE 
> --
> that way this job is just another linux process hierarchy...
>
>
>> On that topic, we've had an offer of a donation of an Intel nuc to
>> use as a permanent host (specs unknown). I also know of at least one
>> Mac Mini M1 which could be donated as a build host.  The idea of
>> collecting hardware sounds nice - but is there a viable way to
>> co-locate, provision network resources, and physically care for such
>> hardware which may come into the Foundation's possession? 
>
> Yeah, that's a good question. Easier said than done!
>
> If these machines get used to build public binaries we would have to
> provide physical security for them as well, which is non-trivial!

-- 
Stelian Ionescu