Compare commits

..

61 Commits

Author SHA1 Message Date
Loïc Dachary 43ab5bb75a
replace favicon
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-06 08:28:26 +10:00
Loïc Dachary 882e3e1717
larger logo on the front page
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-06 08:21:01 +10:00
Loïc Dachary 37ef965888
s/gna-log-/gna-logo-/
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-06 08:15:48 +10:00
Loïc Dachary a49829fdf7
change banner logo
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-06 08:13:14 +10:00
Loïc Dachary df5e5bea44
change banner logo
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-06 08:11:26 +10:00
Loïc Dachary 0a23de6747
change home page logo
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-06 08:10:14 +10:00
Loïc Dachary 2fdc4b2318
add logos and change home page logos
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-06 08:08:38 +10:00
Loïc Dachary 1f78a0bc41
s/Hostea/Gna!/
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-06 07:56:07 +10:00
Loïc Dachary 3d76b7d7c9
s/hostea.org/gna.org/
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-05 18:24:51 +10:00
Loïc Dachary fd67379f56
s/hosteadashboard.hostea/hosteadashboard.gna/
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-05 17:59:32 +10:00
Loïc Dachary bcf1346a34
s/Hostea/Gna!/ in the home page
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-09-03 07:47:00 +10:00
Loïc Dachary d05f31721e
link to Enough in the ToS
ci/woodpecker/push/woodpecker Pipeline was successful Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-08-19 18:24:45 +10:00
Loïc Dachary 5552dcb268
add link to support
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-08-19 18:24:44 +10:00
Aravinth Manivannan d3ac11a38a Merge pull request 'add rel="me" to Mastodon' (#52) from dachary/website:wip-mastodon into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/52
2022-07-21 05:33:49 -04:00
Loïc Dachary 23563778ad
add rel="me" to Mastodon
ci/woodpecker/pr/woodpecker Pipeline failed Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-21 11:32:59 +02:00
Aravinth Manivannan cefd6bce60 Merge pull request 'add link to the mastodon Hostea account' (#51) from dachary/website:wip-mastodon into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/51
2022-07-21 03:41:19 -04:00
Loïc Dachary e4a3a2e778
add link to the mastodon Hostea account
ci/woodpecker/pr/woodpecker Pipeline failed Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-21 01:09:20 +02:00
Loïc Dachary 69df07499b
1.17 breaking changes episode 2
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-07-20 11:57:56 +02:00
Loïc Dachary 70f7bf0f67 Merge pull request 'fix: add introducing hostea talk's slides' (#50) from realaravinth/hostea-website:fix-intro-hostea-slides into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/50
2022-07-12 08:16:22 -04:00
Aravinth Manivannan 9102b4d267
fix: add introducing hostea talk's slides
ci/woodpecker/pr/woodpecker Pipeline failed Details
2022-07-12 13:40:17 +05:30
Loïc Dachary 263029c56b
easter-eggs logo is png not jpg
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-07-10 12:46:09 +02:00
Loïc Dachary c327032ed3
add avatars for Easter-Eggs & dachary
ci/woodpecker/push/woodpecker Pipeline failed Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-10 12:39:11 +02:00
Loïc Dachary 32f01bef92
add avatars for Easter-Eggs & dachary
ci/woodpecker/push/woodpecker Pipeline failed Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-10 12:38:34 +02:00
Loïc Dachary d317e85ec0
update Aravinth clinic link
ci/woodpecker/push/woodpecker Pipeline was successful Details
Fixes: #43

Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-10 12:33:40 +02:00
Loïc Dachary 90fc8f4dfd
update easter-eggs clinic link
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-07-10 12:31:01 +02:00
Loïc Dachary 304d37815a
fix typo
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-07-10 10:30:44 +02:00
Loïc Dachary 227b847c62 Merge pull request 'fix: rm empty whitespace from homepage' (#48) from realaravinth/hostea-website:fix-homepage-whitespace into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/48
2022-07-10 04:20:07 -04:00
Aravinth Manivannan b80f447f13
fix: rm empty whitespace from homepage
ci/woodpecker/pr/woodpecker Pipeline failed Details
2022-07-10 13:45:00 +05:30
Aravinth Manivannan 16d6eebab1 Merge pull request 'Hosting is open' (#47) from dachary/website:wip-open into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/47
2022-07-10 03:47:09 -04:00
Loïc Dachary 1c3c76de1e
Hosting is open
ci/woodpecker/pr/woodpecker Pipeline failed Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-10 09:31:55 +02:00
Aravinth Manivannan 0b5e645220 Merge pull request 'update content' (#42) from dachary/website:wip-content into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/42
2022-07-10 01:21:48 -04:00
Loïc Dachary 2f62756e45
simpler about page with links
ci/woodpecker/pr/woodpecker Pipeline failed Details
2022-07-09 23:34:07 +02:00
Loïc Dachary f49d334342
fix typos 2022-07-09 23:33:55 +02:00
Loïc Dachary ccacc7fea2
ToS: Free Software requirement
ci/woodpecker/pr/woodpecker Pipeline failed Details
Fixes: #41

Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-09 23:13:13 +02:00
Loïc Dachary ed2b280eb8
update content
ci/woodpecker/pr/woodpecker Pipeline failed Details
* move talks to blog
* move contact links to menu
* rework the bullet list of the home page to reflect the current
  Hostea state
* trim the content at the bottom of the index page

Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-09 22:45:02 +02:00
Aravinth Manivannan 49f916a43d Merge pull request 's/hosteadashboardh/hosteadashboard/' (#39) from dachary/website:wip-dash into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/39
2022-07-04 02:22:24 -04:00
Loïc Dachary 186cb6367e
s/hosteadashboardh/hosteadashboard/
ci/woodpecker/pr/woodpecker Pipeline failed Details
Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-04 00:02:31 +02:00
Aravinth Manivannan 416decf4b8 Merge pull request 's/dash.hostea.org/hosteadashboard.hostea.org/' (#38) from dachary/website:wip-dash into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/38
2022-07-03 16:33:52 -04:00
Loïc Dachary fd64dc9e74
s/dash.hostea.org/hosteadashboard.hostea.org/
ci/woodpecker/pr/woodpecker Pipeline failed Details
It is a little tricky to have a cute fqdn like dash.hostea.org when
traversing two reverse proxy and configuring OAuth that depends on the
cute fqdn. I'm sure there is a way but I can't see it right now.

Signed-off-by: Loïc Dachary <loic@dachary.org>
2022-07-03 16:17:08 +02:00
Aravinth Manivannan 15d7806dff Merge pull request 'feat: add login/join links and make main action button point to dashboard' (#36) from realaravinth/hostea-website:master into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/36
2022-07-01 05:29:26 -04:00
Aravinth Manivannan 528c1649ac Merge pull request 'fix: footer; add link to source code' (#37) from realaravinth/hostea-website:fix-footer into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/37
2022-07-01 05:29:07 -04:00
Aravinth Manivannan 5f638a6100
fix: footer; add link to source code
ci/woodpecker/pr/woodpecker Pipeline failed Details
2022-07-01 12:18:50 +05:30
Aravinth Manivannan 695388e962
feat: add login/join links and make main action button point to dashboard
ci/woodpecker/pr/woodpecker Pipeline failed Details
2022-07-01 11:44:58 +05:30
Loïc Dachary 9f7298b2a2
1.17 breaking change episode 1 gitconfig
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-23 19:03:40 +02:00
Loïc Dachary 8a70e65f31
a gentle introduction to the doctor
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-23 18:21:18 +02:00
Loïc Dachary b3e08ea2e0
updates to the zombie post
ci/woodpecker/push/woodpecker Pipeline was successful Details
To reflect the latest version
2022-06-10 18:09:56 +02:00
Loïc Dachary d8676b8891
relative links in zombies part 2
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-04 16:54:14 +02:00
Loïc Dachary eddda717a7
zombies part 2
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-04 16:52:27 +02:00
Loïc Dachary 90d1fc0d54
relink to the relevant pull request
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-03 14:04:15 +02:00
Loïc Dachary 8f1791eb74
git >=2.36 is both in 1.16.9 and 1.17
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-03 14:02:00 +02:00
Loïc Dachary 0e9a9c0c6a
don't be in the future just yet
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-02 15:30:41 +02:00
Loïc Dachary aba2b29872
fix typo
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-02 13:00:04 +02:00
Loïc Dachary 78707c63e7 add Zombies
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-02 06:51:51 -04:00
Loïc Dachary 82d3a571c7
minor updates to reflect the evolution of the safe.directory problem
ci/woodpecker/pr/woodpecker Pipeline failed Details
ci/woodpecker/push/woodpecker Pipeline was successful Details
2022-06-02 12:35:17 +02:00
Aravinth Manivannan 5a6c7ddf62 Merge pull request 'mastodon: verified link' (#33) from dachary/website:wip-me into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/33
2022-06-01 11:10:17 -04:00
Loïc Dachary a63db938f3
mastodon: verified link
ci/woodpecker/pr/woodpecker Pipeline failed Details
2022-06-01 08:24:56 +02:00
Aravinth Manivannan 3373ddedb2 Merge pull request 'blog: Gitea 1.15 and up: path not found or permission denied' (#32) from dachary/website:wip-blog-05-28 into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/32
2022-05-28 04:23:58 -04:00
Loïc Dachary 4b51c1fce7
blog: Gitea 1.15 and up: path not found or permission denied
ci/woodpecker/pr/woodpecker Pipeline failed Details
2022-05-28 06:14:53 +02:00
Aravinth Manivannan 6a22416986 Merge pull request 'blog: safe.directory: s/--system/--global/' (#30) from dachary/website:wip-blog into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/30
2022-05-16 05:04:31 -04:00
Aravinth Manivannan 36c2c6c2ff Merge pull request 'more explicit title for the first blog post' (#31) from dachary/website:wip-blog-1 into master
ci/woodpecker/push/woodpecker Pipeline was successful Details
Reviewed-on: https://gitea.hostea.org/Hostea/website/pulls/31
2022-05-16 05:03:17 -04:00
Loïc Dachary 56d8d3ff48
more explicit title for the first blog post
ci/woodpecker/pr/woodpecker Pipeline failed Details
2022-05-15 16:46:35 +02:00
57 changed files with 663 additions and 260 deletions

View File

@ -1,8 +1,8 @@
<div align="center">
<img width="80px" alt="Hostea logo" src="./static/tmp-logo.png" />
<h1>Hostea Website</h1>
<img width="80px" alt="Gna! logo" src="./static/gna-logo-rectangle.png" />
<h1>Gna! Website</h1>
[![status-badge](https://woodpecker.hostea.org/api/badges/Hostea/website/status.svg)](https://woodpecker.hostea.org/Hostea/website)
[![status-badge](https://woodpecker.gna.org/api/badges/Hostea/website/status.svg)](https://woodpecker.hostea.org/Hostea/website)
[![AGPL License](https://img.shields.io/badge/license-AGPL-blue.svg?style=flat-square)](http://www.gnu.org/licenses/agpl-3.0)
</div>
@ -35,7 +35,7 @@ Build artifacts should be available in `./public/`
## Deployment
This repository uses [Hostea
Woodpecker-CI](https://woodpecker.hostea.org/) to build and
[Hostea/Pages](https://gitea.hostea.org/Hostea/pages) to deploy on each
This repository uses [Gna!
Woodpecker-CI](https://woodpecker.gna.org/) to build and
[Hostea/Pages](https://gitea.gna.org/Hostea/pages) to deploy on each
commit.

View File

@ -1,5 +1,5 @@
# The URL the site will be built for
base_url = "https://hostea.org"
base_url = "https://gna.org"
# Whether to automatically compile all Sass files in the sass directory
compile_sass = true

View File

@ -3,94 +3,16 @@ title = "About"
description = "About"
+++
Hostea provides dedicated managed Gitea hosting, including CI/CD and
static pages. Upgrades are carefully tested and include security
updates. Each Gitea instance is monitored 24/7 and has backups.
Gna! provides [dedicated managed Gitea hosting](https://hosteadashboard.gna.org/dash/instance/new/), including [Woodpecker CI](https://woodpecker-ci.org/). Security updates are applied as soon as they are available and carefully tested. Each Gitea instance is monitored 24/7 and has backups.
### You will want to rent a Gitea instance at Hostea if you are ...
<video width="600" controls>
<source src="https://cloud.forgefriends.org/s/xXLcYpsE469tJEj/download?path=&files=hostea-screencast-vm-create.mp4" type="video/mp4" />
</video>
- Individual software developers or companies who need their own Gitea
instance with CI/CD and static pages but can't be bothered with
installation and maintenance. You want the freedom to download a
backup and seamlessly self-host it whenever you decide: no strings
attached.
- Organizations that want to resell Gitea hosting under their brand and
rent the infrastructure at a discounted price. You want the option to
run the Hostea infrastructure on your own hardware in the future and
seamlessly migrate your clients.
You can rely on Gna! if you are an individual software developer who need their own Gitea instance with CI but can't be bothered with installation and maintenance. You want the freedom to download a backup and seamlessly self-host it whenever you decide: no strings attached.
### Committed to Free Software and Radical Transparency
If you are into trouble and need assistance with a Gitea instance not hosted at Gna!, you [can ask for help at the Gna! clinic](/gitea-clinic/). The doctors have developped a unique expertise and are well equiped to help you recover and upgrade.
- Everything is public, there are no internal discussions, all financial
records are public down to the last cent
- Every piece of software is and will always be exclusively Free
Software so that it can be self-hosted by users and re-used by
competitors
- Private data (names, addresses, etc. ) is carefully protected and
destroyed as soon as possible
---
### Hostea is operated by a collective of individuals and organizations
The members of Hostea are like minded individuals and organizations who
share the same commitment to Free Software and transparency. They share
the Hostea income in proportion of their involvement which is recorded
in a publicly available spreadsheet for everyone to audit.
The motivation for becoming a member of Hostea can be:
- To refer the occasional customer to Hostea, knowing it has a vote to
influence where Hostea is going.
- To provide Gitea hosting to its clients under its own brand because it
is easier than setting up Hostea on their own hardware to do the same.
And knowing that when they want to do so it will be as easy as
possible.
- To make a living as a Free Software developer working on developing
and maintaining Hostea. The time logged working on Hostea will be
compensated with the income.
- To support the idea of a sustainable online service exclusively based
on Free Software (there are actually very few of them, it is a non
trivial problem to solve) and do nothing. In which case there won't be
any income distributed to the member.
- To free developers from centralized forges lock-in by providing a
reliable alternative and work on the Ansible playbooks to maintain
Hostea. In which case the member is entitled to a share of the income
in proportion of the time.
### Truly self-hostable
When self-hosting the development of a software project is difficult, it
is a theoretical possibility that has no practical use. The Gitea
project itself has been stuck on GitHub for many years. Hostea is
committed to provide a seamless migration path to self hosting. A
virtual machine to run the Gitea instance, including CI/CD and static
pages can be downloaded at any time. It can then be booted on premise or
in the cloud.
The infrastructure as code running Hostea itself is published,
documented and tested so that it can also be used on premise. Either to
manage the virtual machine retrieved from Hostea, with the same user
panel, monitoring, backups etc. Or to run a public Gitea hosting service
identical to Hostea and become a competitor.
### Interoperable with existing infrastructures
Running Hostea with its integrated monitoring and backup system is an
interesting proposition: all in one. When it is deployed within an
existing infrastructure that has its own backup and monitoring setup, it
provides:
- A monitoring endpoint to get a global health status (red/green) which
is an aggregation of the probes deployed to verify Gitea runs,
security updates have been applied, the latest upgrades are installed,
backups have been successfully created, communicates with the CI etc.
- A backup download endpoint to get a copy of the backups so they can be
stored in the existing backup system for safekeeping
### Hostea is not ...
- Hostea is not a shared Gitea hosting facility that can be used for free
such as Codeberg. It provides dedicated Gitea instances for a fee.
- Hostea is not a company with shareholders that make a passive income.
The income is redistributed to the people and organizations doing the
work. The workers are also empowered with every decision about Hostea,
either by consensus or by vote.
Do you already have an expertise running Gitea? You are welcome to join the [Gna! collective](https://forum.gna.org/t/57), get in touch [in the forum](https://forum.hostea.org/c/site-feedback/2) or [the chat](https://matrix.to/#/#hostea:matrix.batsense.net).

View File

@ -3,7 +3,7 @@ title = "Project plans for a hosted Gitea online service"
date = 2022-04-18
description = "When an organization asks me about Gitea, I would like to direct them to a provider where they can rent an instance and just use it"
[taxonomies]
tags = ['hostea', 'gitea', 'free-software', 'free-software-sustainability']
tags = ['gna', 'gitea', 'free-software', 'free-software-sustainability']
[extra]
author = 'dachary'

View File

@ -1,9 +1,9 @@
+++
title = "Troubleshooting Gitea upgrades showcase"
title = "[solved] blank or error 500 page after login"
date = 2022-05-08
description = "After going to production, some Gitea users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser."
[taxonomies]
tags = ['hostea', 'gitea', 'upgrade', 'troubleshoot', 'problem']
tags = ['gna', 'gitea', 'upgrade', 'troubleshoot', 'problem']
[extra]
author = 'dachary'
@ -11,7 +11,7 @@ author = 'dachary'
The [instructions to upgrade a Gitea instance](https://docs.gitea.io/en-us/upgrade-from-gitea/#upgrade-from-binary) only require three to four steps. They work fine most of the time but the documentation is lacking a "Troubleshooting" section to help out when something goes wrong. Maintaining instructions on how to diagnose and fix upgrade problems is an ambitious undertaking and requires updates every time a new case is discovered.
An [inventory of the known upgrade issues](https://forum.hostea.org/t/things-to-know-about-gitea-upgrades/39) was started to figure out how to structure such a section in the documentation. The [release notes](https://blog.gitea.io/) were analyzed all the way back to [Gitea 1.9.6](https://github.com/go-gitea/gitea/releases/tag/v1.9.6) and the work is still in progress. Here is a sample of the tips that will be included:
An [inventory of the known upgrade issues](https://forum.gna.org/t/things-to-know-about-gitea-upgrades/39) was started to figure out how to structure such a section in the documentation. The [release notes](https://blog.gitea.io/) were analyzed all the way back to [Gitea 1.9.6](https://github.com/go-gitea/gitea/releases/tag/v1.9.6) and the work is still in progress. Here is a sample of the tips that will be included:
* Upgrade directly to the latest Gitea version, there is no need to upgrade to intermediate versions.
* If the upgrade from version x.y to version x.y+2 fails and there is a need to narrow down the problem, try upgrading to the latest minor version of each major version and verify it works.
@ -35,7 +35,7 @@ There was hope to fix Gitea and in the following days they applied the workaroun
# Getting professional help
The [Hostea Clinic](https://hostea.org/gitea-clinic/) is a collective of individual and companies that provides professional services to Gitea admins. They are active members of the Gitea community who [help out](https://discourse.gitea.io/u/dachary/activity) as volunteers. They can also be hired to resolve the more complicated cases.
The [Gna! Clinic](https://gna.org/gitea-clinic/) is a collective of individual and companies that provides professional services to Gitea admins. They are active members of the Gitea community who [help out](https://discourse.gitea.io/u/dachary/activity) as volunteers. They can also be hired to resolve the more complicated cases.
The Gitea instance that was in trouble required more than a few minutes of work and access to the database content for a proper diagnostic. They [proposed their assistance](https://discourse.gitea.io/t/blank-page-after-login/5051/13) but although [well received](https://discourse.gitea.io/t/user-research-about-gitea-upgrade-experiences-call-for-volunteers/5063/2), it was not accepted.
@ -52,7 +52,7 @@ To summarize with a timeline, here is what happened:
And in retrospect, here is what could have happened instead:
* J+1: The **problem is discovered** by users who see a blank page after login
* J+1: The Gitea admin **[reaches out to someone at the Hostea Clinic](https://hostea.org/gitea-clinic/)**
* J+1: The Gitea admin **[reaches out to someone at the Gna! Clinic](https://gna.org/gitea-clinic/)**
* J+2: The [logs of the Gitea instance](https://discourse.gitea.io/t/blank-page-after-login/5051/12) are analyzed, **the root cause diagnosed** and [a patch](https://discourse.gitea.io/t/blank-page-after-login/5051/17) is created to fix it.
* J+3: If necessary a Gitea binary is created with the patch and used as a temporary replacement until the next point release is published with [the backport](https://github.com/go-gitea/gitea/pull/19629). The Gitea admin runs the patched Gitea binary in the meantime. **There is no data loss**.

View File

@ -1,9 +1,9 @@
+++
title = "[solved] Gitea 1.16.6 1.16.7 error: fatal: unsafe repository is owned by someone else"
title = "[solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else"
date = 2022-05-15
description = "If Gitea runs as user git, calls a patched Git version and a parent directory of the git repositories is owned by a user other than git, it will fail."
[taxonomies]
tags = ['hostea', 'gitea', 'upgrade', 'troubleshoot', 'problem']
tags = ['gna', 'gitea', 'upgrade', 'troubleshoot', 'problem']
[extra]
author = 'dachary'
@ -22,15 +22,15 @@ This started to show in the past few weeks to [users running the Gitea binary on
### Workarounds
* If using [Gitea docker images](https://hub.docker.com/r/gitea/gitea):
* do not upgrade to 1.16.6 or 1.16.7, or
* downgrade from 1.16.6 or 1.16.7 to 1.16.5 (do **not** downgrade from 1.17.x, it may corrupt your the Gitea database)
* upgrade to [Gitea >=1.16.9](https://github.com/go-gitea/gitea/pull/19876) or 1.17, both have git >=2.36
* `git config --global --replace-all safe.directory '*'`
* If the Gitea binary was installed independently of git, upgrade git to a version that is [greater or equal to 2.36](https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory) and disable the security check entirely with:
* impersonate the [user dedicated to Gitea](https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration) (usually git)
* `git config --global --replace-all safe.directory '*'`
* impersonate the [user dedicated to Gitea](https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration) (usually git)
* `git config --global --replace-all safe.directory '*'`
### Bug fix
The [bug fix](https://github.com/go-gitea/gitea/pull/19707) is for Gitea to ensure `git config --global --replace-all safe.directory '*'` is set on its [dedicated user](https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration) when it initializes. It is effective on the condition that the git CLI version is [greater or equal to 2.36](https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory).
The [bug fix](https://github.com/go-gitea/gitea/pull/19870) is for Gitea to ensure `git config --global --replace-all safe.directory '*'` is set on its [dedicated user](https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration) when it initializes. It is effective on the condition that the git CLI version is [greater or equal to 2.36](https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory).
### Bug fix rationale
@ -40,4 +40,5 @@ The security check is triggered because the repository is owned by an unexpected
It appears non trivial to enforce a consistent ownership of files and directories, either within docker or outside docker when networked file systems are involved. The Gitea server was not troubled by this inconsistency so far because the permissions allow it to write and read where expected, regardless of the owner. It is not worth looking into but it is ancient and unrelated.
Gitea runs under a dedicated user, either when installed [from binary](https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration) or from [docker](https://docs.gitea.io/en-us/install-with-docker/) and [modifies the global git configuration](https://github.com/go-gitea/gitea/blob/main/modules/git/git.go#L196-L207) depending on the git version at initialization time. Fixing the problem can therefore be done by [disabling the security check in the global git config file at initialization time](https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#bcd72ff867cbd1ddd5b6518c3a05b5f1a6021286_209_209). It also requires a minimum version of git 2.36 to be installed [in the Gitea docker image](https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#6651ddff6eb82c840ced7c1dddee15c6e1913dd4_44_49).
Gitea runs under a dedicated user, either when installed [from binary](https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration) or from [docker](https://docs.gitea.io/en-us/install-with-docker/) and [modifies the global git configuration](https://github.com/go-gitea/gitea/blob/main/modules/git/git.go#L196-L207) depending on the git version at initialization time. Fixing the problem can therefore be done by [disabling the security check in the global git config file at initialization time](https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#bcd72ff867cbd1ddd5b6518c3a05b5f1a6021286_209_209). It also requires a minimum version of git 2.36 to be installed, which is the case for Gitea docker images with [versions >= 1.16.9](https://github.com/go-gitea/gitea/pull/19876).

View File

@ -0,0 +1,42 @@
+++
title = "[solved] Gitea 1.15 and up: path not found or permission denied"
date = 2022-05-28
description = "After migrating from 1.15 or earlier to gitea 1.16 paths are no longer found and files cannot be created because of permission problems because the default example.ini file changed."
[taxonomies]
tags = ['gna', 'gitea', 'upgrade', 'troubleshoot', 'problem']
[extra]
author = 'dachary'
+++
In Gitea 1.15 the [app.example.ini](https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/custom/conf/app.example.ini) file was changed to [comment out most of the values](https://github.com/go-gitea/gitea/commit/4a84022d2559ccfc99960c7c654ee8b9b38664f7). The assumption was that all values exactly matched the defaults [in the source code](https://github.com/go-gitea/gitea/blob/main/modules/setting/setting.go). However, there are differences, for instance for [APP_DATA_PATH](https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/modules/setting/setting.go#L771). Before Gitea 1.15, `app.example.ini` contained:
```
APP_DATA_PATH = data
```
and the path was relative to the **directory from which the Gitea server was running**. In Gitea 1.15 up to 1.16, it was commented out:
```
; APP_DATA_PATH = data
```
and the path was relative to the **work path directory**, as provided either via the --work-path argument or the `GITEA_WORK_DIR` environment variable.
When a distribution such as voidlinux [uses app.example.ini](https://github.com/void-linux/void-packages/blob/master/srcpkgs/gitea/patches/config.patch) as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea [fails with errors](https://github.com/go-gitea/gitea/issues/19367) such as `unable to open level db at data/data/queues/common: mkdir data: permission denied`. The regression did not show as soon as Gitea 1.15 became available in voidlinux because the package [explicitly set `APP_DATA_PATH`](https://github.com/void-linux/void-packages/blob/7fc9190f0e0d557dd5031e68df4e183892d4315b/srcpkgs/gitea/patches/config.patch#L62). But this [changed when Gitea 1.15.6 was packaged](https://github.com/void-linux/void-packages/commit/19d986a2cae9ce73d32552ddb62443b5e7fa13e2) and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the [Gitea 1.16.8](https://github.com/void-linux/void-packages/commit/44b6c96fa12ce9d993c7a2ac9486d892735b7e3a) package.
The `APP_DATA_PATH` directory is not the only one, the `[log] ROOT_PATH` is another example. There is an [ongoing effort](https://github.com/go-gitea/gitea/pull/19815) to improve the situation in Gitea 1.17. With the downside of introducing breaking changes that will have an impact on all Gitea installations because the content of the `app.ini` file will be interpreted differently. In the case of `APP_DATA_PATH`, both:
```
APP_DATA_PATH = data
```
and:
```
; APP_DATA_PATH = data
```
will be interpreted to be relative to the **work path directory**, as provided either via the --work-path argument or the `GITEA_WORK_DIR` environment variable. Every Gitea installation using **APP_DATA_PATH = data** will need to update the value to be an absolute path such as **/var/lib/gitea/data** so that it keeps pointing to the expected directory.
In order to prepare for the change or ensure the consistency of all path, there fortunately is a very simple **solution: always use absolute paths in the `app.ini` configuration file**.

View File

@ -0,0 +1,81 @@
+++
title = "[diagnostic] Zombies created by Gitea"
date = 2022-06-02
description = "An increasing number of zombies processes are created by Gitea because it only kills its direct children on timeout."
[taxonomies]
tags = ['gna', 'gitea', 'troubleshoot', 'problem']
[extra]
author = 'dachary'
+++
The first [issue about zombie processes](https://github.com/go-gitea/gitea/issues/3242) created by Gitea was reported in 2017 and [resurfaced](https://github.com/go-gitea/gitea/issues/13987) on a [regular basis](https://github.com/go-gitea/gitea/issues/19077). Although it does not look pretty, zombie processes are leftovers that do not consume resources and never caused any kind of harm. Here is one scenario that will create a zombie:
* Gitea updates a mirror by spawning the process `git remote update`
* `git remote update` spawns yet another process, `git fetch`
* `git fetch` is stuck, for instance because of network problems, and Gitea eventually times out
* Gitea kill the process `git remote update`
* When killed `git remote update` does not kill its own child and `git fetch` becomes an orphaned process which keeps running
* When `git fetch` eventually completes it becomes a zombie because its original parent is no longer around to wait on it
### PID 1 process and waiting on orphans
This scenario is not unique to Gitea and it is such a common pattern that safeguards have been implemented to mitigate the proliferation of zombies. Orphaned process are automatically attached to the process with PID 1, which is expected to wait on every process, whether it created them or not. When Gitea is installed from binary on GNU/Linux this is `/bin/init` and when Gitea runs from the [default docker image](https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile) this is `s6`: they will both wait on orphaned processes and there won't be any zombies.
### What if Gitea is the only running process?
But when Gitea runs from the [rootless docker image](https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile.rootless), Gitea is the only process running in the container. Orphaned processes will have Gitea as a parent but will not wait on them and they will stay in a zombie state forever. To reproduce this problem in a minimal way:
```
$ docker run --name gitea -p 8080:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless
$ docker exec --user 1000 gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com
```
The `git` command can then be replaced with a script that waits forever:
```
$ ( echo -e '#!/bin/bash\nsleep infinity' ) | docker exec -i --user root gitea tee /usr/bin/git
$ docker exec --user root gitea chmod +x /usr/bin/git
```
Trying to create a repository from the web interface will create the conditions for a zombie to show:
```
$ docker exec gitea ps -o ppid,pid,comm,args
PPID PID COMMAND COMMAND
0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web
1 94 sleep [sleep]
1 99 sleep [sleep]
1 111 sleep [sleep]
1 164 git {git} /bin/bash /usr/bin/git -c credential.helper= -c protocol.version=2 -c uploadpack.allowfilter=true -c uploadpack.allowAnySHA1InWant=true init --bare
164 165 sleep sleep infinity
```
When the `git` process is killed by Gitea, the `sleep` child will be orphaned:
```
$ docker exec gitea ps -o ppid,pid,comm,args
PPID PID COMMAND COMMAND
0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web
1 94 sleep [sleep]
1 99 sleep [sleep]
1 111 sleep [sleep]
1 165 sleep sleep infinity
```
Killing it will turn it into a zombie:
```
$ docker exec gitea kill 165
$ docker exec gitea ps -o ppid,pid,comm,args
PPID PID COMMAND COMMAND
0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web
1 94 sleep [sleep]
1 99 sleep [sleep]
1 111 sleep [sleep]
1 165 sleep [sleep]
```
### Killing a child process and all its children
There should be no need for an admin running Gitea to worry about those gory details, it should be taken care of regardless of the environment Gitea runs in. Fortunately there is a very simple way to avoid the creation of zombies by ensuring that all Gitea child process are [process group leaders](https://en.wikipedia.org/wiki/Process_group). In a nutshell it means that when the child is killed all its children and grand children are also killed.

View File

@ -0,0 +1,66 @@
+++
title = "[solved] Zombies created by Gitea"
date = 2022-06-04
description = "Gitea can use process groups to kill its children using a negative PID to never create zombies."
[taxonomies]
tags = ['gna', 'gitea', 'troubleshoot', 'problem']
[extra]
author = 'dachary'
+++
Gitea can [create zombies](/blog/zombies), for instance if a Git mirror takes too long. When updating a mirror, Gitea relies on the `git remote update` command which creates a child process, `git-remote-https`, to fetch data from the remote repository. Gitea has an internal timeout that will kill the child process (e.g. `git remote update`) when it takes too long but will not kill the grandchild. This grandchild will become an orphan and run forever or until its own timeout expires, which is about two minutes on git version 2.25.
```
$ time git clone https://4.4.4.4
Clonage dans '4.4.4.4'...
fatal: impossible d'accéder à 'https://4.4.4.4/': Failed to connect to 4.4.4.4 port 443: Connexion terminée par expiration du délai d'attente
real 2m9,753s
user 0m0,001s
sys 0m0,009s
```
As explained in the [diagnostic blog post regarding Gitea zombies](/blog/zombies/#killing-a-child-process-and-all-its-children) there fortunately is a very simple way to avoid this by making sure each Gitea child is a [process group leader](https://en.wikipedia.org/wiki/Process_group). That first step was [introduced in Gitea 1.17](https://github.com/go-gitea/gitea/pull/19865) and [backported to Gitea 1.16.9](https://github.com/go-gitea/gitea/pull/19865). The actual bug fix can now be implemented.
### Using negative process id to kill children
When Gitea timeout on a child, it relies on [os.Process.Kill](https://github.com/golang/go/blob/f8a53df314e4af8cd350eedb0dae77d4c4fc30d0/src/os/exec/exec.go#L650) which translates into a using the kill(2) system call to send a SIGKILL signal to unconditionally terminate it: `kill(pid, SIGKILL)`. Using a negative pid with `kill(-pid, SIGKILL)` will also terminate all processes created by Gitea's child, without Gitea knowing when or why they were created. From the kill(2) manual page:
> If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.
Which is implemented as follows in the [Friendly Forge Format library](https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L130):
> `syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)`
### Not using the default Go CommandContext
Since [CommandContext](https://pkg.go.dev/os/exec#CommandContext) does not allow to send a signal to the negative pid of the child process, it has to be implemented by Gitea itself, in a way that is similar to how the [Friendly Forge Format library](https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L75-82) does it:
```
ctxErr := watchCtx(ctx, cmd.Process.Pid)
err = cmd.Wait()
interruptErr := <-ctxErr
// If cmd.Wait returned an error, prefer that.
// Otherwise, report any error from the interrupt goroutine.
if interruptErr != nil && err == nil {
err = interruptErr
}
```
### Testing the bug is fixed and stays fixed
Long standing bugs that are difficult to reproduce manually such as this one require robust testing to ensure that:
* the diagnostic identifying the root cause is correct
* the bug fix works
* it does not resurface insidiously because of a subtle regression introduce years later
It is easy to implement as can be seen in the [Friendly Forge Format library](https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L44-76). In a nutshell:
* [git clone https://4.4.4.4](https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L53) which will hang because of firewall rules
* [wait for the git-remote-https](https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L60-65) grandchild process to be spawned
* [cancel the context and wait for the goroutine to terminate](https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L67-68)
* [verify the git-remote-https is killed](https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L70-75)
And with that... no more zombies!

View File

@ -0,0 +1,151 @@
+++
title = "[tutorial] A gentle introduction to the gitea doctor"
date = 2022-06-14
description = "The doctor command is useful to check the health of a running Gitea instance. Specially after performing an upgrade."
[taxonomies]
tags = ['gna', 'gitea', 'troubleshoot', 'problem', 'tutorial']
[extra]
author = 'dachary'
+++
While helping people with their upgrades [in the Gitea forum](https://discourse.gitea.io/t/migration-from-1-2-to-1-16-8/5309) or [at the Gna! clinic](https://forum.gna.org/t/gitea-upgrade-from-1-14-1-to-1-16-8/90), I realized that few Gitea admins know about the [`gitea doctor`](https://docs.gitea.io/en-us/command-line/#doctor) command and decided to write this blog post as a gentle introduction.
### An apple a day keeps the doctor away
Or in our case, Gitea versions [below 1.11.5](https://github.com/go-gitea/gitea/blob/v1.11.5/cmd/doctor.go). Since then, the `gitea doctor` is available and is designed to run against a specific Gitea version. It would not be a good idea to try to run the doctor from Gitea 1.16 to verify the sanity of a Gitea 1.2 instance: it will be confused by how the database is organized and a number of other details. Historical fun fact: the `gitea doctor` was backported to [Gitea 1.10.5](https://github.com/go-gitea/gitea/blob/v1.10.5/cmd/doctor.go) and [Gitea 1.10.6](https://github.com/go-gitea/gitea/blob/v1.10.6/cmd/doctor.go) and may be of help if you run this particular version and are facing the problem that motivated the backport.
With each version `gitea doctor` improves and gains new capabilities. For instance, in Gitea 1.17 it becomes aware of [orphaned pull requests](https://github.com/go-gitea/gitea/pull/19731) and is able to fix them. If such a problem exists in Gitea 1.16, it does not know about it.
### Calling the doctor
In the following, examples are based on a Gitea 1.16.8 instance you can run as follows:
```bash
$ docker run --name gitea -p 3000:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless
$ docker exec gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com
$ docker exec gitea mkdir /var/lib/gitea/data/log
```
And then you can go to the [web interface](https://127.0.0.1:3000/) to create a `test` repository, with an initial `README.md` file. When this is done the doctor can be called as follows:
```bash
$ docker exec gitea gitea doctor --all
[1] Check paths and basic configuration
- [I] Configuration File Path: "/etc/gitea/app.ini"
- [I] Repository Root Path: "/var/lib/gitea/git/repositories"
- [I] Data Root Path: "/var/lib/gitea"
- [I] Custom File Root Path: "/var/lib/gitea/custom"
- [I] Work directory: "/var/lib/gitea"
- [I] Log Root Path: "/var/lib/gitea/data/log"
OK
[2] Check if there is garbage storage files
OK
[3] Check Database Version
OK
[4] Check consistency of database
OK
[5] Check if user with wrong type exist
OK
[6] Check if OpenSSH authorized_keys file is up-to-date
OK
[7] Check if SCRIPT_TYPE is available
- [I] ScriptType bash is on the current PATH at /bin/bash
OK
[8] Check if hook files are up-to-date and executable
OK
[9] Recalculate Stars number for all user
OK
[10] Check old archives
- [I] 0 old archives in repository need to be deleted
OK
[11] Enable push options
- [I] Checked 1 repositories, 0 need updates.
OK
[12] Check for incorrectly dumped repo_units (See #16961)
- [W] Found 0 broken repo_units
OK
[13] Recalculate merge bases
- [W] 0 PRs with incorrect mergebases of 0 PRs total in 1 repos
OK
[14] Check git-daemon-export-ok files
- [I] Checked 1 repositories, 0 need updates.
```
### What does the doctor know?
Although the `doctor` can be compared to [fsck(8)](https://en.wikipedia.org/wiki/Fsck), it does not know everything. It took decades for `fsck` to become the ultimate authority on finding problems on file systems and reliably fixing them without losing data. Nowadays, only a handful of people in the world are brave enough to manually attempt a file system recovery when `fsck` cannot recover from a data loss.
The first `doctor` version is two years old and Gitea admins are still routinely running SQL queries against the database or moving files around when trying to figure out why a Gitea instance is not behaving as it should. It is however worth checking if the doctor does not already have a solution by listing all it can do:
```bash
$ docker exec gitea gitea doctor --list
Default Name Title
* paths Check paths and basic configuration
storages Check if there is garbage storage files
* check-db-version Check Database Version
check-db-consistency Check consistency of database
* check-user-type Check if user with wrong type exist
* authorized-keys Check if OpenSSH authorized_keys file is up-to-date
script-type Check if SCRIPT_TYPE is available
hooks Check if hook files are up-to-date and executable
recalculate-stars-number Recalculate Stars number for all user
check-old-archives Check old archives
enable-push-options Enable push options
fix-broken-repo-units Check for incorrectly dumped repo_units (See #16961)
recalculate-merge-bases Recalculate merge bases
check-git-daemon-export-ok Check git-daemon-export-ok files
```
And then call the `check` that looks interesting:
```bash
$ docker exec gitea gitea doctor --run authorized-keys
[1] Check if OpenSSH authorized_keys file is up-to-date
OK
```
The challenge is to figure out which `check` does what and at the moment the best source of information is ... [the sources](https://github.com/go-gitea/gitea/tree/v1.16.8) themselves. The [doctor.go](https://github.com/go-gitea/gitea/blob/v1.16.8/cmd/doctor.go) command is the entry point and [the doctor directory](https://github.com/go-gitea/gitea/tree/v1.16.8/modules/doctor) contains the rest.
Some `checks` are straightforward to understand, even if you do not know Go, such as [the authorized-keys check](https://github.com/go-gitea/gitea/blob/v1.16.8/modules/doctor/authorizedkeys.go). Others are much more involved and your best chance is to [ask the Gitea chatroom](https://matrix.to/#/#gitea:matrix.org) for help.
### Is it going to hurt?
By default the doctor (very much like `fsck -N`) only performs non destructive checks and displays diagnostics, with an indication of how serious the problem is. In the example above, there only are lines with **[I]** (which indicates an information) and **[W]** which indicates a warning that can be ignored but may be worth looking into. Those two warnings are actually just informational and should be labelled as **[I]**, [which has been fixed](https://github.com/go-gitea/gitea/pull/19836) in a more recent version of the doctor.
Now let's do something bad: remove the permissions from a hook in our repository:
```bash
$ docker exec gitea chmod -x /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive
```
Run the doctor with the `check` supposed to find that out:
```bash
$ docker exec gitea gitea doctor --run hooks
[1] Check if hook files are up-to-date and executable
- [W] old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable
```
Ask it to fix this with the `--fix` flag:
```bash
$ docker exec gitea gitea doctor --run hooks --fix
[1] Check if hook files are up-to-date and executable
- [W] Regenerated hooks for root/test
- [W] old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable
```
And run it one last time to check all is well:
```bash
$ docker exec gitea gitea doctor --run hooks
[1] Check if hook files are up-to-date and executable
OK
```
Even when the doctor is unable to fix a problem, it can help by showing extensive debug output which can be found, by default, in the `doctor.log` file in the directory from which it runs. Or it can be displayed on the standard output with `--log-file -`, which is most convenient when running in docker.
### Going further
If that was helpful to you, I would very much appreciate if you [send me a message on Mastodon](https://mastodon.online/@dachary). It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could [send a pull request](https://github.com/go-gitea/gitea/pulls) to improve the doctor and help it mature.

View File

@ -0,0 +1,47 @@
+++
title = "1.17 breaking changes episode 1: preserving a custom gitconfig"
date = 2022-06-22
description = "The location of the gitconfig file used by Gitea moved and custom modifications must be manually moved as well."
[taxonomies]
tags = ['gna', 'gitea', 'troubleshoot', 'problem', 'tutorial']
[extra]
author = 'dachary'
+++
Before version 1.17, when Gitea needed to change the [git configuration](https://git-scm.com/docs/git-config), it modified the `$HOME/.gitconfig` file. For instance it would [set core.quotePath to false](https://github.com/go-gitea/gitea/blob/release/v1.16/modules/git/git.go#L174-L177):
```ini
[core]
quotePath = false
```
When installing Gitea [from docker](https://docs.gitea.io/en-us/install-with-docker/) or [rootless](https://docs.gitea.io/en-us/install-with-docker-rootless/) or even [from binary](https://docs.gitea.io/en-us/install-from-binary/) this `$HOME/.gitconfig` file belongs to a user that is [dedicated to Gitea](https://docs.gitea.io/en-us/install-from-binary/#prepare-environment) and not used by anyone else.
However, if an Gitea installation was done differently and `$HOME/.gitconfig` has been customized because it is shared by a user or another application, there is a good chance that manual modifications were done such as:
```ini
[user]
name = Jane Doe
email = jane@doe.com
```
It is also possible that the file was modified manually by the Gitea admin for other reasons. In both there is a **potential for breakage when upgrading to Gitea >= 1.17 because the location of the file changed**. It must be moved manually to the new location as follows:
* Figure out the directory where `$HOME/.gitconfig` must be moved by [running the doctor](https://gna.org/blog/gentle-introduction-to-the-doctor/):
```shell
$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor
[1] Check paths and basic configuration
- [I] Configuration File Path: "/data/gitea/conf/app.ini"
- [I] Repository Root Path: "/data/git/repositories"
- [I] Data Root Path: "/data/gitea"
- [I] Custom File Root Path: "/data/gitea"
- [I] Work directory: "/app/gitea"
- [I] Log Root Path: "/data/gitea/log"
OK
```
* Copy the `$HOME/.gitconfig` file to the **Repository Root Path** (which is `/data/git/repositories` in the example above).
The reason why this breaking change was introduced is to workaround [a rare problem](https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/) impacting Gitea installations relying on networked volumes.

View File

@ -0,0 +1,34 @@
+++
title = "1.17 breaking changes episode 2: preserving a custom gitconfig"
date = 2022-07-20
description = "The location of the gitconfig file used by Gitea moved twice, here is a guide to sort out why and how to deal with it."
[taxonomies]
tags = ['gna', 'gitea', 'troubleshoot', 'problem', 'tutorial']
[extra]
author = 'dachary'
+++
On June 21st, 2022 1.17.0-rc1 was published and the location of the gitconfig file moved to a new location, [which required manual intervention](2022-06-23-1.17-breaking-episode-1). This change impacted a large number of Gitea installations because the docker image tag **latest** [was set to 1.17.0-rc1](https://mastodon.online/@hostea/108514134565401798) by accident. As a result, about 10,000 pulls per hour from the docker hub got the release candidate instead of the expected stable version.
Unfortunately moving the git home directory in 1.17.0-rc1 was implemented in way that created a security problem. The [fix that was merged in Gitea](https://github.com/go-gitea/gitea/pull/20114) to fix it requires moving the gitconfig file and was released July 19th, 2022 in 1.17.0-rc2.
This would have been a minor inconvenience if it only has an impact on adventurous people trying the release candidate in a test environment. But since all Gitea production installations based on the **latest** tag were inadvertently upgraded to 1.17.0-rc1, the admins who moved their custom .gitconfig will need to move it one more time when upgrading to 1.17.0-rc2.
In 1.17.0-rc2, a custom .gitconfig must be moved manually to the [new git home directory](https://docs.gitea.io/en-us/config-cheat-sheet/#git-git) as follows:
* Figure out the directory where `$HOME/.gitconfig` must be moved by [running the doctor](https://gna.org/blog/gentle-introduction-to-the-doctor/):
```shell
$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor
[1] Check paths and basic configuration
- [I] Configuration File Path: "/data/gitea/conf/app.ini"
- [I] Repository Root Path: "/data/git/repositories"
- [I] Data Root Path: "/data/gitea"
- [I] Custom File Root Path: "/data/gitea"
- [I] Work directory: "/app/gitea"
- [I] Log Root Path: "/data/gitea/log"
OK
```
* Copy the `$HOME/.gitconfig` file to the **Data Root Path**/home (which is `/data/gitea/home` in the example above).

View File

@ -0,0 +1,46 @@
+++
title = "Get a Gitea instance with CI at Gna!"
date = 2022-07-10
description = "It is now possible to rent a Gitea instance by the month, with Woodpecker CI. A self-hostable hosting solution supported by a horizontal collective of individuals and organizations. 25% of the income is dedicated to help the Free Software projects it depends on such as Gitea, Enough, Django, etc."
[taxonomies]
tags = ['gna', 'gitea', 'federation', 'forgefriends']
[extra]
author = 'dachary'
+++
Hosting a Gitea instance on Gna! is now possible (but still experimental). It is meant to be a minimum viable product: anyone can [create a new dedicated Gitea instance](https://hosteadashboard.gna.org) within minutes and pay for it on a monthly basis with a credit card. It includes a dedicated CI based on [Woodpecker](https://woodpecker-ci.org/). The smallest instance costs 10€ per month (2GB RAM, 10GB disk, 1CPU) and will be a good fit for a freelance up to a team of five people but bigger instances are also available if more RAM, CPU or disk is required.
<video width="600" controls>
<source src="https://cloud.forgefriends.org/s/xXLcYpsE469tJEj/download?path=&files=hostea-screencast-vm-create.mp4" type="video/mp4" />
</video>
The service is 100% infrastructure as code, published as [Ansible playbooks within Enough](https://lab.enough.community/main/infrastructure/-/tree/9e18ebbf675c8a65d1585d20b4cf6295af6e52ed/playbooks/hosteadashboard). It can be self-hosted on bare metal (with [libvirt](https://libvirt.org/)) or in the cloud (with [OpenStack](https://www.openstack.org/)): follow the [quick start](https://enough-community.readthedocs.io/en/latest/introduction.html#quick-start), configure playbooks for [hostea](https://enough-community.readthedocs.io/en/latest/services/hostea.html) and [the dashboard](https://enough-community.readthedocs.io/en/latest/services/hosteadashboard.html).
The organization supporting Gna! is a [horizontal collective](https://forum.gna.org/c/governance-and-decisions/7) of individuals and organizations. The [revenue sharing model](https://forum.hostea.org/t/decision-revenue-sharing-model/92) is set to dedicate 25% of the income (more than the profits) to help the Free Software projects Hostea depends on such as Gitea, Enough, Django etc.
### The origin
In February 2022 the project of running a dedicated Gitea hosting service was [proposed to the Gitea project](https://discourse.gitea.io/t/a-gitea-hosting-service-under-the-umbrella-of-the-gitea-project/4692) and other organizations and [plans were drafted](https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/). After a month of discussions it turned out to not be a [good match for any of them](https://blog.dachary.org/2022/03/11/the-inconclusive-story-of-four-failed-project-offers/).
It was suggested to create a new project from scratch instead of joining an existing organization. However, in order to be sustainable, a hosting service needs customers willing to pay for the service. And nobody had that kind of skill. It was therefore decided that to terminate the project: there is no point is creating a technical stack that's not going to be used by anyone.
### A technical stack with no users
The most common mistake technical people do when creating a new piece of software is to overlook the fact that they have absolutely no idea how to let their intended user base know about it. Maybe the reason it happens so often is because it is very difficult to resist the urge of creating something. Because that's what technical people love to do: create things, even when they have no clue if it can be used.
It took no longer than two weeks for the people involved in Gna! to decide to build the technical stack to run hostea instead of being reasonable and give up. It was just too tempting.
To keep the madness contained and enjoyable, it was decided to set a deadline to July 1st and to [define precise and realistic technical goals](https://gitea.gna.org/Hostea/july-mvp/issues). It turned out to be an enjoyable experience: everyone learned a lot in the process and the outcome is something that can be reproduced. Most MVPs are a brittle pile of hacks designed to last a few weeks and be thrown away. But since a primary goal of the project was to create something self-hostable, it had to implement that feature and therefore be reproducible.
### A horizontal collective with a revenue sharing model
Another goal of Gna! is to deploy federated forges, even at an experimental stage. Instead of creating a centralized organization to support Hostea, it was decided to create [horizontal collective](https://forum.gna.org/c/governance-and-decisions/7). It feels like a contradiction for a project committed to decentralization to be governed by a centralized organization.
The collective is composed of individuals and organizations but, unlike exclusively volunteer based Free Software projects, it is for profit. Customers rent Gitea instances by the month and the income is used to pay for expenses. There is however a difficulty: by nature a horizontal collective cannot be incorporated as it would create a level of hierarchy. The [revenue sharing model](https://forum.gna.org/t/decision-revenue-sharing-model/92) had to be set as an informal agreement between members where one of them receives the income and distributes it to the others, depending on their Gna! related expenses.
It also requires that 25% of the income (not the profits) is dedicated to help the Free Software projects that Gna! depends on such as Gitea, Enough, Django etc. It can be via a donation, by upstreaming a bug fix or any kind of work that is beneficial to the dependency.
### Dedicated to forge federation
In the spirit of dogfooding, the people who created the technical stack of Gna! will use it for themselves on a daily basis. Since the focus of the authors is on [forge federation](https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/), they will add federation support in Hostea. This will be their primary motivation to improve and maintain Hostea: it is the only hosting platform where this can happen.

View File

@ -1,5 +1,5 @@
+++
title = "Introducing Hostea"
title = "Introducing Gna!"
date = "2022-04-22"
description = "Introducing Hostea, a project Loïc Dachary and Aravinth Manivannan are working on to create a 100% Free software development suite, complete with CI/CD, static pages and gists"
draft = false
@ -11,7 +11,7 @@ tags = ['hostea', 'forgefriends']
author = 'realaravinth'
+++
Introducing [Hostea](https://hostea.org), a project [Loïc
Introducing [Hostea](https://gna.org), a project [Loïc
Dachary](https://dachary.org) and [Aravinth
Manivannan](https://batsense.net) are working on to create a full Free
software development suite based on

View File

@ -3,17 +3,17 @@ title = "Code of Conduct"
description = "Code of Conduct"
+++
### The Hostea collective strives to:
### The Gna! collective strives to:
* **Be friendly, patient and welcoming.** We strive to be a collective that welcomes and supports people of all backgrounds and identities. This includes, but is not limited to, members of any race, ethnicity, culture, national origin, colour, immigration status, social and economic class, educational level, sex, sexual orientation, gender identity and expression, age, size, family status, political belief, religion and mental and physical ability.
* **Be considerate.** Our work will be used by other people, and we in turn will depend on the work of others. Any decision we take will affect users and colleagues, and we should take those consequences into account when making decisions. Remember that we're a world-wide community and we have a global base of users and of contributors. Even if it's not obvious at the time, our contributions to projects managed by the hostea collective will impact the work of others.
* **Be respectful.** Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners. We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack. Its important to remember that a collective where people feel uncomfortable or threatened is not a productive one. Members of the collective should be respectful when dealing with other contributors as well as with people outside of the collective and with users of the projects managed by Hostea.
* **Collaborate openly.** Collaboration is central to projects managed by Hostea and to the larger free software community. This collaboration involves individuals working within teams, cross-project collaboration within Hostea and working with other projects outside of Hostea. This collaboration reduces redundancy, and improves the quality of our work. Internally and externally, we should always be open to collaboration. Wherever possible, we should work closely with upstream and downstream projects and others in the free software community to coordinate our technical, advocacy, documentation and other work. Our work must be done transparently and we should involve as many interested parties as early as possible. If we decide to take a different approach than others, we will let them know early, document our work and inform others regularly of our progress. We do not create private forms of communication that take away transparency or exclude other contributors and collaborators.
* **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time and Hostea is no exception. It is important that we resolve disagreements and differing views constructively. Remember that were different. The strength of Hostea comes from people with a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesnt mean that theyre wrong.
* **Be considerate.** Our work will be used by other people, and we in turn will depend on the work of others. Any decision we take will affect users and colleagues, and we should take those consequences into account when making decisions. Remember that we're a world-wide community and we have a global base of users and of contributors. Even if it's not obvious at the time, our contributions to projects managed by the Gna! collective will impact the work of others.
* **Be respectful.** Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners. We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack. Its important to remember that a collective where people feel uncomfortable or threatened is not a productive one. Members of the collective should be respectful when dealing with other contributors as well as with people outside of the collective and with users of the projects managed by Gna!.
* **Collaborate openly.** Collaboration is central to projects managed by Gna! and to the larger free software community. This collaboration involves individuals working within teams, cross-project collaboration within Hostea and working with other projects outside of Hostea. This collaboration reduces redundancy, and improves the quality of our work. Internally and externally, we should always be open to collaboration. Wherever possible, we should work closely with upstream and downstream projects and others in the free software community to coordinate our technical, advocacy, documentation and other work. Our work must be done transparently and we should involve as many interested parties as early as possible. If we decide to take a different approach than others, we will let them know early, document our work and inform others regularly of our progress. We do not create private forms of communication that take away transparency or exclude other contributors and collaborators.
* **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time and Gna! is no exception. It is important that we resolve disagreements and differing views constructively. Remember that were different. The strength of Hostea comes from people with a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesnt mean that theyre wrong.
* **Focus on helping to resolve issues and learning from mistakes.** It is important that we resolve disagreements and differing views constructively and with the help of the collective. When our goals differ dramatically, we encourage the creation of alternative implementations, so that the collective can test new ideas and contribute to the discussion.
* **When we are unsure, we ask for help.** Nobody knows everything, and nobody is expected to be perfect in Hostea. Asking questions avoids many problems down the road, and so questions are encouraged. Those who are asked questions should be responsive and helpful. However, when asking a question, care must be taken to do so in an appropriate forum.
* **When we are unsure, we ask for help.** Nobody knows everything, and nobody is expected to be perfect in Gna!. Asking questions avoids many problems down the road, and so questions are encouraged. Those who are asked questions should be responsive and helpful. However, when asking a question, care must be taken to do so in an appropriate forum.
### We take the following very seriously, and any violations may impact your ability to participate in Hostea
### We take the following very seriously, and any violations may impact your ability to participate in Gna!
* **Be careful with your words and actions.** Do not insult or put down other participants. Harassment and other exclusionary behavior is not acceptable and should be reported. This includes but is not limited to:
* Violent threats or language directed against another person.
@ -24,4 +24,4 @@ description = "Code of Conduct"
* Unwelcome sexual attention.
* Advocating for, or encouraging, any of the above behavior.
* Repeated harassment of others. In general, if someone asks you to stop, then stop.
* **Respect the decision process.** Members of Hostea should not attempt to manipulate decisons based on consensus or election results. Open debate is welcome, but vote trading, ballot stuffing and other forms of abuse are not acceptable.
* **Respect the decision process.** Members of Gna! should not attempt to manipulate decisons based on consensus or election results. Open debate is welcome, but vote trading, ballot stuffing and other forms of abuse are not acceptable.

View File

@ -1,21 +0,0 @@
---
title: "Contact"
draft: false
---
## Matrix
We have a public [Matrix
chatroom](https://matrix.to/#/#hostea:matrix.batsense.net) that we use
for instant messaging.
## Forum
We also have a [forum](https://forum.hostea.org/) that we use for
long-form discussions.
## Source Code
All Hostea software is 100% [Free
Software](https://www.gnu.org/philosophy/free-sw.en.html) and is hosted
on the [Hostea Gitea](https://gitea.hostea.org)

View File

@ -5,16 +5,16 @@ description = "Get help with your sick Gitea instance"
## How does it work?
You can get help from the community on the [Hostea forum](https://forum.hostea.org/c/clinic/5) or the [Gitea forum](https://discourse.gitea.io/): it is the best way to resolve simple issues. If you are in a hurry or the problem is serious you could:
You can get help from the community on the [Gna! forum](https://forum.gna.org/c/clinic/5) or the [Gitea forum](https://discourse.gitea.io/): it is the best way to resolve simple issues. If you are in a hurry or the problem is serious you could:
1. Get in touch with the [doctor of your choice](#hostea-doctors)
1. Get in touch with the [doctor of your choice](#gna-doctors)
2. Upload your sick Gitea
3. Once it is repaired download it back home (or decide it deserves a permanent residence at [Hostea](https://hostea.org))
3. Once it is repaired download it back home (or decide it deserves a permanent residence at [Gna!](https://gna.org))
4. Pay the doctor
## How much does it cost?
All Hostea doctors charge a flat hourly rate for consultations held in public (sensitive information is never revealed, even if the consultation is held in public). Private consultations fees depend on the Hostea doctor.
All Gna! doctors charge a flat hourly rate for consultations held in public (sensitive information is never revealed, even if the consultation is held in public). Private consultations fees depend on the Hostea doctor.
## Hostea Doctors
## Gna! Doctors
{{ gitea_clinic_doc_reviews() }}

View File

@ -17,14 +17,14 @@ There is no warranty for the service, to the extent permitted by applicable law.
## Limitation of Liability
In no event unless required by applicable law or agreed to in writing will any member of the Hostea community, or any other party who modifies the service as permitted by Hostea, be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the service (including but not limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of the service to operate with any other service), even if such member or other party has been advised of the possibility of such damages.
In no event unless required by applicable law or agreed to in writing will any member of the Gna! community, or any other party who modifies the service as permitted by Hostea, be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the service (including but not limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of the service to operate with any other service), even if such member or other party has been advised of the possibility of such damages.
## Interpretation of the Warranty and Liability disclaimers](#interpretation)
## Interpretation of the Warranty and Liability disclaimers
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the service.
## Hosting
The services and this web site, as well as all sub-domains, are exclusively maintained and used by the individuals composing the Hostea. They can be reached at contact@hostea.org.
The services and this web site, as well as all sub-domains, are exclusively maintained and used by the individuals composing the Gna!. They can be reached at contact@gna.org.
For details, see [the documentation](https://enough-community.readthedocs.io/).

View File

@ -11,7 +11,7 @@ In the context of a horizontal community, the word **we** has a different meanin
We collect information from you when you register on our site and gather data when you participate in the community by reading, writing, and evaluating the content shared here.
When registering on Hostea sites, you may be asked to enter your name and e-mail address. You may, however, visit our sites without registering. Your e-mail address will be verified by an email containing a unique link. If that link is visited, we know that you control the e-mail address.
When registering on Gna! sites, you may be asked to enter your name and e-mail address. You may, however, visit our sites without registering. Your e-mail address will be verified by an email containing a unique link. If that link is visited, we know that you control the e-mail address.
When registered and participating, we record the IP address that the post originated from. We also may retain server logs which include the IP address of every request to our server.
@ -35,7 +35,7 @@ We will make a good faith effort to:
## What about my data?
Users of Hotea's services can ask contact@hostea.org to:
Users of Hotea's services can ask contact@gna.org to:
* Delete their account on a service when it is not a feature available to the user (for instance Nextcloud)
* Retrieve data associated with their account on a service that does not already provide full access

View File

@ -3,5 +3,5 @@ title: "Service Work in Progress"
draft: false
---
Thank you for your interest in Hostea, we are a work-in-progress. [Come
Thank you for your interest in Gna!, we are a work-in-progress. [Come
say hi](/contact) and join the conversion! :)

View File

@ -1,7 +0,0 @@
+++
title = "Talks"
sort_by = "date"
template = "blog/index.html"
page_template = "blog/post.html"
generate_feed = true
+++

View File

@ -5,19 +5,27 @@ draft: false
## CHATONS Charter compliance
Hostea is committed to comply with the [CHATONS charter](https://framagit.org/chatons/CHATONS/-/blob/master/docs/charter-and-manifesto.md).
Gna! is committed to comply with the [CHATONS charter](https://framagit.org/chatons/CHATONS/-/blob/master/docs/charter-and-manifesto.md).
All applications and infrastructure software used in Hostea are published under a Free Software license.
All applications and infrastructure software used in Gna! are published under a Free Software license.
## User content
Hostea has no copyright claim over content uploaded by its users.
Gna! has no copyright claim over content uploaded by its users.
Hostea hosts, via application software, content in private spaces that are not publicly accessible. Hostea system administrators is committed to not look into those private spaces, even when they have the technical ability to do so, so as to respect the privacy expectations of hostea users.
Gna! hosts, via application software, content in private spaces that are not publicly accessible. Hostea system administrators are committed to not look into those private spaces, even when they have the technical ability to do so, to respect the users privacy.
## Infrastructure](#infrastructure)
## Support
Hostea exclusively uses resources located in France, at the Graveline OVH datacenter (59820 Gravelines, Nord-Pas-de-Calais-Picardie, France) and at 12 bd Magenta, 75010 Paris, France. A copy of the backups is kept at Arndtstr 44, 10965 Berlin, Germany.
Support requests should be filed as an issue in https://gitea.gna.org/Hostea/support/issues.
## Publicly available content published on Gitea instances
All publicly available software published on the dedicated Gitea instances provided by Gna! must be published under a [Free Software license](https://www.gnu.org/licenses/license-list.html).
## Infrastructure
Gna! exclusively uses resources located in France, at the Graveline OVH datacenter (59820 Gravelines, Nord-Pas-de-Calais-Picardie, France) and at 12 bd Magenta, 75010 Paris, France. A copy of the backups is kept at Arndtstr 44, 10965 Berlin, Germany. It is created and maintained using [Enough](https://lab.enough.community/main/infrastructure).
## Security
@ -31,14 +39,14 @@ Disaster recovery involves rebooting the machine that was lost using a backup, e
## GDPR compliance
A user can request deletion or anonymisation of the data they are unable to delete themselves by sending a request to contact@hostea.org.
A user can request deletion or anonymisation of the data they are unable to delete themselves by sending a request to contact@gna.org.
A user can request an copy of the data held by Hostea that they are unable to download themselves by sending a request to contact@hostea.org.
A user can request an copy of the data held by Gna! that they are unable to download themselves by sending a request to contact@gna.org.
## Editorial responsibility
The person responsible for the editorial content published on Hostea is Loïc Dachary, 12 bd Magenta, 75010 Paris.
The person responsible for the editorial content published on Gna! is Loïc Dachary, 12 bd Magenta, 75010 Paris.
## Human contact
Hostea users are kindly invited to get in touch with loic@dachary.org and organize a meeting in person to discuss the services provided.
Gna! users are kindly invited to get in touch with loic@dachary.org and organize a meeting in person to discuss the services provided.

View File

@ -3,7 +3,8 @@
[[ doctors ]]
nick = "dachary"
name ="Loïc Dachary"
website = "https://gitea.hostea.org/dachary/hostea/issues"
website = "https://gitea.gna.org/dachary/hostea/issues"
picture = "/people/dachary.png"
[[ doctors.reviews ]]
name = "Chris H."
@ -16,7 +17,7 @@ remarks = "https://discourse.gitea.io/t/blank-page-after-login/5051/14"
[[ doctors ]]
nick = "realaravinth"
name ="Aravinth Manivannan"
website = "https://batsense.net"
website = "https://gitea.gna.org/realaravinth/hostea/issues"
picture = "/people/realaravinth.jpg"
[[ doctors.reviews ]]
@ -39,7 +40,9 @@ remarks = "Nice"
[[ doctors ]]
nick = "easter-eggs"
name ="Easter-eggs"
website = "https://easter-eggs.com/"
website = "https://gitea.gna.org/easter-eggs/clinic/issues"
picture = "/people/easter-eggs.png"
[[ doctors.reviews ]]
name = "Ken G"

View File

@ -1,4 +1,4 @@
# Add new Hostea Doctor to Gitea Clinic section:
# Add new Gna! Doctor to Gitea Clinic section:
1. Add the following template to
[`clinic-doctors.toml`](../data/clinic-doctors.toml) and fill in the

View File

@ -1,4 +1,4 @@
# Add ratings to Hostea Doctor
# Add ratings to Gna! Doctor
1. To rate Doctor `batman` from
[./gitea-clinic-new-doctor.md](./gitea-clinic-new-doctor.md) guide,

View File

@ -11,7 +11,7 @@ date = "yyyy-mm-dd"
description = "description of talk, will be displayed in talk listing"
[taxonomies]
tags = ['hostea']
tags = ['gna']
[extra]
# **Only use author nicks in blog post Markdown files, it is used to lookup author details.**

View File

@ -54,7 +54,7 @@ $heading-letter-spacing: 20px;
}
.index-banner__logo {
width: 120px;
// width: 120px;
margin: auto;
border-radius: 20px;
}

View File

@ -4,6 +4,7 @@
display: flex;
align-items: center;
height: 200px;
justify-content: space-between;
}
.home__vision-text-line {

View File

@ -28,8 +28,13 @@ header {
display: none;
}
.nav__spacer--small {
width: 100px;
margin: auto;
}
.nav__spacer {
flex: 3;
flex: 4;
margin: auto;
}
@ -53,7 +58,8 @@ header {
width: 40px;
}
.nav__link-group {
@mixin nav__link-group {
flex: 1.5;
list-style: none;
display: flex;
flex-direction: row;
@ -63,13 +69,37 @@ header {
text-align: center;
}
.nav__link-container {
.nav__link-group {
@include nav__link-group;
}
.nav__link-group--small {
@include nav__link-group;
flex: 0.5;
margin-right: 10px;
}
@mixin nav__link-container {
display: flex;
padding: 10px;
height: 100%;
margin: auto;
}
.nav__link-container {
@include nav__link-container;
}
.nav__link-container--action {
@include nav__link-container;
background-color: green;
padding: 15px;
.nav__link {
color: white !important;
}
}
.nav__link {
text-decoration: none;
color: black !important;

View File

@ -14,7 +14,8 @@ $nav__hamburger-inner-height: 1.3px;
justify-content: space-between;
}
.nav__link-group {
.nav__link-group,
.nav__link-group--small {
position: sticky;
flex-direction: column;
margin: auto;
@ -23,11 +24,26 @@ $nav__hamburger-inner-height: 1.3px;
// background-color: $light-blue;
}
.nav__link-container {
.nav__link-container--action {
background-color: #fff;
.nav__link {
color: #000 !important;
}
}
@mixin nav__link-container {
border-bottom: 1px dashed rgba(55, 55, 55, 0.4);
width: 70%;
}
.nav__link-container {
@include nav__link-container;
}
.nav__link-container--action {
@include nav__link-container;
}
.nav__link-container:last-child {
border-bottom: none;
}
@ -46,13 +62,17 @@ $nav__hamburger-inner-height: 1.3px;
display: none;
}
.nav__toggle:not(:checked) ~ .nav__link-group {
.nav__link-group {
margin-right: auto;
}
.nav__toggle:not(:checked) ~ .nav__link-group, .nav__link-group--small {
max-height: 0;
transition: max-height $hamburger-menu-animation;
overflow: hidden;
}
.nav__toggle:checked ~ .nav__link-group {
.nav__toggle:checked ~ .nav__link-group, .nav__toggle:checked ~ .nav__link-group--small {
max-height: 500px;
transition: max-height $hamburger-menu-animation;
}

View File

@ -57,7 +57,7 @@ set_ssh_remote() {
repository_owner=$(echo $http_remote_url | cut -d '/' -f 4)
repository_name=$(echo $http_remote_url | cut -d '/' -f 5)
ssh_remote="git@$remote_hostname:$repository_owner/$repository_name"
ssh_remote="git@gitea.hostea.org:Hostea/website.git"
ssh_remote="git@gitea.gna.org:Hostea/website.git"
git remote add $SSH_REMOTE_NAME $ssh_remote
}
@ -79,7 +79,7 @@ deploy() {
git -c core.sshCommand="/usr/bin/ssh -oStrictHostKeyChecking=no -i $SSH_ID_FILE"\
push --force $SSH_REMOTE_NAME $2
curl -vv --location --request \
POST "http://hostea.org:5000/api/v1/update"\
POST "http://gna.org:5000/api/v1/update"\
--header 'Content-Type: application/json' \
--data-raw "{ \"secret\": \"$1\", \"branch\": \"$2\" }"
fi

View File

@ -80,7 +80,7 @@ build() {
}
no_absolute_url() {
sed -i 's/https:\/\/hostea.org//g' $(find public -type f | grep html)
sed -i 's/https:\/\/gna.org//g' $(find public -type f | grep html)
}
clean() {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 B

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 829 B

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
static/gna-logo-square.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
static/people/dachary.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -8,6 +8,7 @@
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
<link rel="manifest" href="/site.webmanifest" />
<link rel="me" href="https://pouet.chapril.org/@gna" />
<link rel="stylesheet" href="{{ get_url(path='/main.css') }}" />
<link
rel="stylesheet"

View File

@ -1,14 +1,14 @@
{% extends "base.html" %} {% block meta %}
{% set title = "Posts" %}
{% set description = "The Hostea Blog: we write about Gitea, Free Software and the general forge ecosystem" %}
{% set description = "The Gna! Blog: we write about Gitea, Free Software and the general forge ecosystem" %}
{{ macros::get_meta_tags(title=title, description=description) }}
{% endblock meta %} {% block content %}
<div class="blog__container">
<h1 class="blog__title">{{ section.title }}</h1>
<p>Hostea is a <a href="https://hostea.org/gitea-clinic">Clinic</a> to get help when a Gitea instance throws errors after an upgrade and the admin is not sure how to troubleshoot the problem. It opened in May 2022 and welcomes new patients. It will also provide dedicated Gitea hosting, including CI and more: subscribe <a href="https://hostea.org/blog/atom.xml">to the blog</a> or the <a href="https://mastodon.online/@hostea">Mastodon account</a> to keep up to date.</p>
<p>Gna! is a <a href="https://gna.org/gitea-clinic">Clinic</a> to get help when a Gitea instance throws errors after an upgrade and the admin is not sure how to troubleshoot the problem. It opened in May 2022 and welcomes new patients. It will also provide dedicated Gitea hosting, including CI and more: subscribe <a href="https://hostea.org/blog/atom.xml">to the blog</a> or the <a rel="me" href="https://mastodon.online/@hostea">Mastodon account</a> to keep up to date.</p>
<ul class="blog__list">
{% for page in section.pages %}

View File

@ -44,11 +44,11 @@
<a href="/privacy-policy" title="Privacy Policy">Privacy</a>
<span class="footer__column-divider--mobile-only">|</span>
<a
href="https://stats.uptimerobot.com/EQ7VJHWylx"
href="https://gitea.gna.org/Hostea"
rel="noreferrer"
target="_blank"
title="Status"
>Status</a
>Source Code</a
>
<a href="/tos" title="Terms of Service">ToS</a>
</div>

View File

@ -3,21 +3,20 @@
<div class="index-banner__content-container">
<h1 class="index-banner__title">
Free Forge Ecosystem for Free Developers
<a href="https://gitea.io">Gitea</a> hosting and <a href="/gitea-clinic/">service</a>.
</h1>
<p class="index-banner__tagline">Hostea is a self-hostable libre software development
suite comprising Gitea, Woodpecker CI, Librepages and GitPad with payments integration.</p>
<p class="index-banner__tagline">A free forge ecosystem for free developers.</p>
<ul class="index-banner__features-list">
<li class="index-banner__features">100% Free Software</li>
<li class="index-banner__features">Fully Self-Hostable</li>
<li class="index-banner__features">Observable and Reliable</li>
<li class="index-banner__features">Federation when available</li>
<li class="index-banner__features">Radically Transparent</li>
<li class="index-banner__features">Horizontal Community</li>
<li class="index-banner__features">Run Hostea and become a service provider!</li>
<li class="index-banner__features">Dedicated <a href="https://hosteadashboard.gna.org/register/">Gitea hosting</a> and <a href="https://woodpecker-ci.org/">Woodpecker CI</a> from 10€/month</li>
<li class="index-banner__features">Clinic to <a href="/gitea-clinic/">heal sick Gitea</a> instances</li>
<li class="index-banner__features">100% <a href="https://www.gnu.org/philosophy/free-sw.html">Free Software</a></li>
<li class="index-banner__features">Radically <a href="https://forum.gna.org/t/55">Transparent</a></li>
<li class="index-banner__features">Run by a <a href="https://forum.gna.org/t/55">horizontal collective</a></li>
<li class="index-banner__features">25% of the income <a href="https://forum.gna.org/t/decision-revenue-sharing-model/92">dedicated to sustain Free Software dependencies</a></li>
<li class="index-banner__features">Committed to <a href="https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/">further forge federation</a></li>
</ul>
<button class="index-banner__main-action-btn">
<a href="/service-wip" class="index-banner__main-action-link"
<a href="https://hosteadashboard.gna.org" class="index-banner__main-action-link"
>Get Started</a
>
</button>
@ -26,8 +25,8 @@
<div class="index-banner__logo-container">
<img
class="index-banner__logo"
src="{{ get_url(path='/tmp-logo.png', cachebust=true) }}"
alt="Hostea temporary logo"
src="{{ get_url(path='/gna-logo-rectangle.png', cachebust=true) }}"
alt="Gna! logo"
/>
</div>

View File

@ -2,11 +2,11 @@
<div class="index-banner">
<img
class="index-banner__logo"
src="{{ get_url(path='/tmp-logo.png', cachebust=true) }}"
alt="Hostea temporary logo"
src="{{ get_url(path='/gna-logo-rectangle.png', cachebust=true) }}"
alt="Gna! temporary logo"
/>
<h1 class="index-banner__title">HOSTEA</h1>
<p class="index-banner__tagline">Gitea's Paradise</p>
<h1 class="index-banner__title">Gna!</h1>
<p class="index-banner__tagline">Free Software forge hosting</p>
<button class="index-banner__main-action-btn">
<a href="/service-wip" class="index-banner__main-action-link">Get Started</a>
</button>

View File

@ -30,8 +30,8 @@
</div>
<div class="home-card__group">
{{ card_macro::home_card(title="Towards Forge Federation 🚀", description="Hostea developers are also leading the charge in implementing ecosystem-wide federation, we really care about software development :)") }}
{{ card_macro::home_card(title="Observable and Reliable", description="All Hostea software come with monitoring and backups configured for high, observable reliability") }}
{{ card_macro::home_card(title="Fully Self-Hostable ", description="Like to get your hands dirty? We got you covered! Hostea comes with infrastructure as code and documentation to make self-hostable a first class experience") }}
{{ card_macro::home_card(title="Towards Forge Federation 🚀", description="Gna! developers are also leading the charge in implementing ecosystem-wide federation, we really care about software development :)") }}
{{ card_macro::home_card(title="Observable and Reliable", description="All Gna! software come with monitoring and backups configured for high, observable reliability") }}
{{ card_macro::home_card(title="Fully Self-Hostable ", description="Like to get your hands dirty? We got you covered! Gna! comes with infrastructure as code and documentation to make self-hostable a first class experience") }}
</div>
</section>

View File

@ -2,7 +2,7 @@
<section class="service__features">
<div class="service-card__group">
<!--
{{ card_macro2::home_card2(title="Gitea Clinic", description="Having issues upgrading your self-hosted Gitea? Upload it to Hostea and a doctor will help out. Once it feels better you can bring it home or decide it becomes a permanent resident.", action_link="/gitea-clinic") }}
{{ card_macro2::home_card2(title="Gitea Clinic", description="Having issues upgrading your self-hosted Gitea? Upload it to Gna! and a doctor will help out. Once it feels better you can bring it home or decide it becomes a permanent resident.", action_link="/gitea-clinic") }}
-->
@ -10,12 +10,12 @@
<div class="service-card__text-container">
<p class="service-card__service-name">Gitea Clinic</p>
<h2 class="service-card__title">Debug and Recover Self-Hosted Gitea Instances</h2>
<p class="service-card__text">Having issues upgrading your self-hosted Gitea? Upload it to Hostea and a doctor will help out. Once it feels better you can bring it home or decide it becomes a permanent resident.</p>
<p class="service-card__text">Having issues upgrading your self-hosted Gitea? Upload it to Gna! and a doctor will help out. Once it feels better you can bring it home or decide it becomes a permanent resident.</p>
<ul class="index-banner__features-list">
<li class="index-banner__features">Consult Gitea experts</li>
<li class="index-banner__features">Upload your sick Gitea</li>
<li class="index-banner__features">Once it gets better bring it back home</li>
<li class="index-banner__features">Optionally, decide it should get a permanent residence at hostea</li>
<li class="index-banner__features">Optionally, decide it should get a permanent residence at Gna!</li>
</ul>
<button class="service-card__aciton-btn">
<a href="/gitea-clinic" class="home__vision-action-link">Learn More</a>
@ -37,13 +37,13 @@
{{ card_macro2::home_card2(title="Gitea Hosting", description="Dedicated Gitea hosting with Woodpecker, flat monthly price, unlimited bandwidth and users. All upgrades included. Fully self-hostable. ETA July 1st, 2022.", template=true ) }}
{{ card_macro2::home_card2(title="Towards Forge Federation 🚀", description="Hostea is leading the charge in implementing forge federation. It will be made available to all hosted Gitea instance as soon as it is available.") }}
{{ card_macro2::home_card2(title="Towards Forge Federation 🚀", description="Gna! is leading the charge in implementing forge federation. It will be made available to all hosted Gitea instance as soon as it is available.") }}
-->
</div>
<div class="action-call__container">
<div class="action-call__margin-container">
<p class="action-call__prompt">Stuck with a broken Gitea instance? Talk to a Hostea Doctor!</p>
<p class="action-call__prompt">Stuck with a broken Gitea instance? Talk to a Gna! Doctor!</p>
<button class="action-call__button"><a href="/contact" class="action-call_link">Contact Us</a></button>
</div>
</div>

View File

@ -2,7 +2,7 @@
<h2 class="home__features-title">Services Offered</h2>
<div class="home-card__group">
{{ card_macro::home_card(title="Gitea Hosting", description="Dedicated Gitea hosting with Woodpecker, flat monthly price, unlimited bandwidth and users. All upgrades included. Fully self-hostable. ETA July 1st, 2022.") }}
{{ card_macro::home_card(title="Gitea Clinic", description="Having issues upgrading your self-hosted Gitea? Upload it to Hostea and a doctor will help out. Once it feels better you can bring it home or decide it becomes a permanent resident.") }}
{{ card_macro::home_card(title="Towards Forge Federation 🚀", description="Hostea is leading the charge in implementing forge federation. It will be made available to all hosted Gitea instance as soon as it is available.") }}
{{ card_macro::home_card(title="Gitea Clinic", description="Having issues upgrading your self-hosted Gitea? Upload it to Gna! and a doctor will help out. Once it feels better you can bring it home or decide it becomes a permanent resident.") }}
{{ card_macro::home_card(title="Towards Forge Federation 🚀", description="Gna! is leading the charge in implementing forge federation. It will be made available to all hosted Gitea instance as soon as it is available.") }}
</div>
</section>

View File

@ -26,7 +26,7 @@
</p>
<div class="home__vision-action-container">
<h2 class="home__vision-intro-title">Meet Hostea</h2>
<h2 class="home__vision-intro-title">Meet Gna!</h2>
<p class="home__vision-intro-tagline">
Where sustainable free homes are created for free software development
</p>

View File

@ -14,7 +14,7 @@
<div class="service-card__icon-container">
<img
src="{{ get_url(path='/tmp-logo.png', cachebust=true) }}"
src="{{ get_url(path='/gna-logo-rectangle.png', cachebust=true) }}"
alt="Temporary card icon"
class="service-card__icon"
/>

View File

@ -1,7 +1,7 @@
{% macro home_card(title, description) %}
<div class="home-card__conatiner">
<img
src="{{ get_url(path='/tmp-logo.png', cachebust=true) }}"
src="{{ get_url(path='/gna-logo-rectangle.png', cachebust=true) }}"
alt="Temporary card icon"
class="home-card__icon"
/>

View File

@ -3,35 +3,10 @@
{% import "home/components/home-card-new.html" as card_macro2 %}
{% extends "base.html" %} {% block meta %}
{% set description = "Hostea: Dedicated managed Gitea hosting, including CI/CD
{% set description = "Gna!: Dedicated managed Gitea hosting, including CI/CD
and static pages with upgrades, backups and 24/7 monitoring" %} {% set title =
"Home" %} {{ macros::get_meta_tags(title=title, description=description) }} {%
endblock meta %} {% block content %}
{% include "home/components/_banner-new.html" %}
<!-- <div class="index__container"> -->
<div class="index__group-content">
<div class="page__group-content">
<div class="action-call__container">
<div class="action-call__margin-container">
<p class="action-call__prompt">Need an independent forge? Talk to an expert!</p>
<button class="action-call__button"><a href="/contact" class="action-call_link">Contact Us</a></button>
</div>
</div>
<div class="page__container--split">
{% include "home/components/_vision.html" %}
<section class="home__features">
<div class="home-card__group">
{{ card_macro::home_card(title="Radically Transparent", description="Hostea is radically transparent, we hold discussions in the open and publish all expenses down to the last penny") }}
{{ card_macro::home_card(title="100% Free Software", description="All Hostea components are Free, you are welcome to download and even sell Hostea!") }}
{{ card_macro::home_card(title="Horizontal Community", description="Hostea development is lead by a horizontal community minded individuals and organisations with a common goal to advance Free Software.") }}
</div>
</section>
</div>
{% include "home/components/_services-new.html" %}
{% include "home/components/_features.html" %}
</div>
</div>
<!-- </div> -->
{% endblock content %}

View File

@ -49,7 +49,7 @@
{% macro get_meta_tags(title, description) %}
{% set title = title ~ " | Hostea: Managed Gitea Hosting " %}
{% set title = title ~ " | Gna!: Managed Gitea Hosting " %}
<link rel="stylesheet" href="{{ get_url(path='/main.css') }}" />
<link
rel="stylesheet"
@ -169,6 +169,13 @@
</div>
{% endmacro nav_link %}
{% macro nav_link_action(link, name) %}
<div class="nav__link-container--action">
<a class="nav__link" rel="noreferrer" href="{{ link }}">{{ name }}</a>
</div>
{% endmacro nav_link %}
{% macro get_author(nick) %}
{% for author in config.extra.authors %}
{% if author.nick == nick %}

View File

@ -6,27 +6,24 @@
<div class="nav__header">
<a class="nav__logo-container" href="/">
<img src="{{ get_url(path='/android-icon-48x48.png', cachebust=true) }}"
alt="Hostea temporary logo"/>
<p class="nav__home-btn">
ostea
</p>
<img src="{{ get_url(path='/gna-logo-rectangle-48px.png', cachebust=true) }}" alt="Gna!"/>
</a>
<label class="nav__hamburger-menu" for="nav__toggle">
<span class="nav__hamburger-inner"></span>
</label>
</div>
<div class="nav__spacer"></div>
<div class="nav__spacer--small"></div>
<div class="nav__link-group">
{{ macros::nav_link(link="/about/", name="About") }}
{{ macros::nav_link(link="/blog/", name="Blog") }}
{{ macros::nav_link(link="/contact/", name="Contact") }}
{{ macros::nav_link(link="/gitea-clinic/", name="Gitea Clinic") }}
{{ macros::nav_link(link="/talks/", name="Talks") }}
{{ macros::nav_link(link="/about/", name="About") }}
{{ macros::nav_link(link="/blog/", name="Blog") }}
{{ macros::nav_link(link="https://matrix.to/#/#gna:matrix.batsense.net", name="Chat") }}
{{ macros::nav_link(link="/gitea-clinic/", name="Clinic") }}
{{ macros::nav_link(link="https://forum.gna.org", name="Forum") }}
{{ macros::nav_link(link="https://pouet.chapril.org/@gna", name="Mastodon") }}
</div>
<div class="nav__spacer"></div>
<div class="nav__link-group--small">
{{ macros::nav_link(link="https://hosteadashboard.gna.org/login/", name="Login") }}
{{ macros::nav_link_action(link="https://hosteadashboard.gna.org/register/", name="Join") }}
</div>
</nav>