From 81bd905aa5f110cc0c7b7d982f81b07ebe442504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Dachary?= Date: Tue, 6 Sep 2022 13:34:25 +0000 Subject: [PATCH] new deploy: 2022-09-06T13:34:25+00:00 --- 404.html | 3 + about/index.html | 285 +++++++ android-icon-144x144.png | Bin 0 -> 1578 bytes android-icon-192x192.png | Bin 0 -> 1477 bytes android-icon-36x36.png | Bin 0 -> 838 bytes android-icon-48x48.png | Bin 0 -> 912 bytes android-icon-72x72.png | Bin 0 -> 1003 bytes android-icon-96x96.png | Bin 0 -> 1155 bytes apple-icon-114x114.png | Bin 0 -> 1258 bytes apple-icon-120x120.png | Bin 0 -> 1328 bytes apple-icon-144x144.png | Bin 0 -> 1578 bytes apple-icon-152x152.png | Bin 0 -> 1673 bytes apple-icon-180x180.png | Bin 0 -> 2066 bytes apple-icon-57x57.png | Bin 0 -> 941 bytes apple-icon-60x60.png | Bin 0 -> 961 bytes apple-icon-72x72.png | Bin 0 -> 1003 bytes apple-icon-76x76.png | Bin 0 -> 1061 bytes apple-icon-precomposed.png | Bin 0 -> 1909 bytes apple-icon.png | Bin 0 -> 1909 bytes blog/1-17-breaking-episode-1/index.html | 338 ++++++++ blog/1-17-breaking-episode-2/index.html | 330 ++++++++ .../index.html | 334 ++++++++ ...-04-22-forgefriends-introducing-hostea.odp | Bin 0 -> 252842 bytes ...-04-22-forgefriends-introducing-hostea.pdf | Bin 0 -> 259384 bytes blog/atom.xml | 758 ++++++++++++++++++ .../index.html | 357 +++++++++ blog/experimental/index.html | 339 ++++++++ .../index.html | 428 ++++++++++ blog/index.html | 675 ++++++++++++++++ blog/main.css | 1 + blog/mobile.css | 1 + blog/path-not-found/index.html | 326 ++++++++ .../index.html | 529 ++++++++++++ .../index.html | 346 ++++++++ blog/zombies-part-2/index.html | 362 +++++++++ blog/zombies/index.html | 368 +++++++++ browserconfig.xml | 2 + coc/index.html | 309 +++++++ defaults.css | 1 + elasticlunr.min.js | 10 + favicon-16x16.png | Bin 0 -> 6999 bytes favicon-32x32.png | Bin 0 -> 9868 bytes favicon-96x96.png | Bin 0 -> 28709 bytes favicon.ico | Bin 0 -> 3262 bytes footer/main.css | 1 + footer/mobile.css | 1 + gitea-clinic/index.html | 389 +++++++++ gitea-clinic/main.css | 1 + gitea-clinic/mobile.css | 1 + gna-logo-rectangle-48px.png | Bin 0 -> 15454 bytes gna-logo-rectangle.png | Bin 0 -> 20698 bytes gna-logo-square.png | Bin 0 -> 21227 bytes home/card-main.css | 1 + home/card-mobile.css | 1 + home/main.css | 1 + home/mobile.css | 1 + home/service-card-main.css | 1 + home/service-card-mobile.css | 1 + home/vision-mobile.css | 1 + home/vision.css | 1 + icons/email.svg | 1 + icons/file-text.svg | 1 + icons/github.svg | 1 + icons/matrix.svg | 1 + icons/rss.svg | 1 + index.html | 304 +++++++ legalese/index.html | 308 +++++++ main.css | 1 + manifest.json | 41 + mobile.css | 1 + ms-icon-144x144.png | Bin 0 -> 1578 bytes ms-icon-150x150.png | Bin 0 -> 1653 bytes ms-icon-310x310.png | Bin 0 -> 4156 bytes ms-icon-70x70.png | Bin 0 -> 1039 bytes nav/main.css | 1 + nav/mobile.css | 1 + page/main.css | 1 + page/mobile.css | 1 + people/dachary.png | Bin 0 -> 80169 bytes people/easter-eggs.png | Bin 0 -> 20562 bytes people/realaravinth.jpg | Bin 0 -> 89793 bytes privacy-policy/index.html | 342 ++++++++ robots.txt | 3 + search_index.en.js | 1 + service-wip/index.html | 279 +++++++ sitemap.xml | 110 +++ tag/main.css | 1 + tag/mobile.css | 1 + tags/federation/atom.xml | 48 ++ tags/federation/index.html | 314 ++++++++ tags/forgefriends/atom.xml | 86 ++ tags/forgefriends/index.html | 336 ++++++++ tags/free-software-sustainability/atom.xml | 238 ++++++ tags/free-software-sustainability/index.html | 314 ++++++++ tags/free-software/atom.xml | 238 ++++++ tags/free-software/index.html | 314 ++++++++ tags/gitea/atom.xml | 720 +++++++++++++++++ tags/gitea/index.html | 560 +++++++++++++ tags/gna/atom.xml | 720 +++++++++++++++++ tags/gna/index.html | 560 +++++++++++++ tags/hostea/atom.xml | 47 ++ tags/hostea/index.html | 310 +++++++ tags/index.html | 485 +++++++++++ tags/problem/atom.xml | 452 +++++++++++ tags/problem/index.html | 508 ++++++++++++ tags/troubleshoot/atom.xml | 452 +++++++++++ tags/troubleshoot/index.html | 508 ++++++++++++ tags/tutorial/atom.xml | 199 +++++ tags/tutorial/index.html | 372 +++++++++ tags/upgrade/atom.xml | 132 +++ tags/upgrade/index.html | 372 +++++++++ tmp-logo.png | Bin 0 -> 3828 bytes tos/index.html | 331 ++++++++ 113 files changed, 16520 insertions(+) create mode 100644 404.html create mode 100644 about/index.html create mode 100644 android-icon-144x144.png create mode 100644 android-icon-192x192.png create mode 100644 android-icon-36x36.png create mode 100644 android-icon-48x48.png create mode 100644 android-icon-72x72.png create mode 100644 android-icon-96x96.png create mode 100644 apple-icon-114x114.png create mode 100644 apple-icon-120x120.png create mode 100644 apple-icon-144x144.png create mode 100644 apple-icon-152x152.png create mode 100644 apple-icon-180x180.png create mode 100644 apple-icon-57x57.png create mode 100644 apple-icon-60x60.png create mode 100644 apple-icon-72x72.png create mode 100644 apple-icon-76x76.png create mode 100644 apple-icon-precomposed.png create mode 100644 apple-icon.png create mode 100644 blog/1-17-breaking-episode-1/index.html create mode 100644 blog/1-17-breaking-episode-2/index.html create mode 100644 blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/index.html create mode 100644 blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/slides/2022-04-22-forgefriends-introducing-hostea.odp create mode 100644 blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/slides/2022-04-22-forgefriends-introducing-hostea.pdf create mode 100644 blog/atom.xml create mode 100644 blog/blank-or-error-500-page-after-login/index.html create mode 100644 blog/experimental/index.html create mode 100644 blog/gentle-introduction-to-the-doctor/index.html create mode 100644 blog/index.html create mode 100644 blog/main.css create mode 100644 blog/mobile.css create mode 100644 blog/path-not-found/index.html create mode 100644 blog/project-plans-for-hosted-gitea-online-service/index.html create mode 100644 blog/unsafe-repository-is-owned-by-someone-else/index.html create mode 100644 blog/zombies-part-2/index.html create mode 100644 blog/zombies/index.html create mode 100644 browserconfig.xml create mode 100644 coc/index.html create mode 100644 defaults.css create mode 100644 elasticlunr.min.js create mode 100644 favicon-16x16.png create mode 100644 favicon-32x32.png create mode 100644 favicon-96x96.png create mode 100644 favicon.ico create mode 100644 footer/main.css create mode 100644 footer/mobile.css create mode 100644 gitea-clinic/index.html create mode 100644 gitea-clinic/main.css create mode 100644 gitea-clinic/mobile.css create mode 100644 gna-logo-rectangle-48px.png create mode 100644 gna-logo-rectangle.png create mode 100644 gna-logo-square.png create mode 100644 home/card-main.css create mode 100644 home/card-mobile.css create mode 100644 home/main.css create mode 100644 home/mobile.css create mode 100644 home/service-card-main.css create mode 100644 home/service-card-mobile.css create mode 100644 home/vision-mobile.css create mode 100644 home/vision.css create mode 100644 icons/email.svg create mode 100644 icons/file-text.svg create mode 100644 icons/github.svg create mode 100644 icons/matrix.svg create mode 100644 icons/rss.svg create mode 100644 index.html create mode 100644 legalese/index.html create mode 100644 main.css create mode 100644 manifest.json create mode 100644 mobile.css create mode 100644 ms-icon-144x144.png create mode 100644 ms-icon-150x150.png create mode 100644 ms-icon-310x310.png create mode 100644 ms-icon-70x70.png create mode 100644 nav/main.css create mode 100644 nav/mobile.css create mode 100644 page/main.css create mode 100644 page/mobile.css create mode 100644 people/dachary.png create mode 100644 people/easter-eggs.png create mode 100644 people/realaravinth.jpg create mode 100644 privacy-policy/index.html create mode 100644 robots.txt create mode 100644 search_index.en.js create mode 100644 service-wip/index.html create mode 100644 sitemap.xml create mode 100644 tag/main.css create mode 100644 tag/mobile.css create mode 100644 tags/federation/atom.xml create mode 100644 tags/federation/index.html create mode 100644 tags/forgefriends/atom.xml create mode 100644 tags/forgefriends/index.html create mode 100644 tags/free-software-sustainability/atom.xml create mode 100644 tags/free-software-sustainability/index.html create mode 100644 tags/free-software/atom.xml create mode 100644 tags/free-software/index.html create mode 100644 tags/gitea/atom.xml create mode 100644 tags/gitea/index.html create mode 100644 tags/gna/atom.xml create mode 100644 tags/gna/index.html create mode 100644 tags/hostea/atom.xml create mode 100644 tags/hostea/index.html create mode 100644 tags/index.html create mode 100644 tags/problem/atom.xml create mode 100644 tags/problem/index.html create mode 100644 tags/troubleshoot/atom.xml create mode 100644 tags/troubleshoot/index.html create mode 100644 tags/tutorial/atom.xml create mode 100644 tags/tutorial/index.html create mode 100644 tags/upgrade/atom.xml create mode 100644 tags/upgrade/index.html create mode 100644 tmp-logo.png create mode 100644 tos/index.html diff --git a/404.html b/404.html new file mode 100644 index 0000000..f8414f0 --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + +404 Not Found +

404 Not Found

diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..e5d8bc2 --- /dev/null +++ b/about/index.html @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + About | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

About

+
+

Gna! provides dedicated managed Gitea hosting, including Woodpecker CI. Security updates are applied as soon as they are available and carefully tested. Each Gitea instance is monitored 24/7 and has backups.

+ +

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.

+

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. The doctors have developped a unique expertise and are well equiped to help you recover and upgrade.

+
+

Do you already have an expertise running Gitea? You are welcome to join the Gna! collective, get in touch in the forum or the chat.

+ +
+
+ + +
+ + +
+ + diff --git a/android-icon-144x144.png b/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..5e6c54173af9ef82e341ce50b0985122e80c881d GIT binary patch literal 1578 zcmZ{kdpOit7{`xGE|u_5Bs48H*_avqHZwmmGcFl18h2V^jJeU6!H7tsp~PyDR8L7m zgjPh#%4Igx(4sa{Q3`Etjmx9mBCR_m<> z0H`^W9Xt@5wLDai4`?=T3`LA0i$oy-P?fo6fwl_qQFO8g1%UW(0Z2*#U>=!D8U-K* z1HgDN0Pr~gbohC<-EEM7e29ya16WGU?2sUyvcQ?*sQgAzWwoL9(o8iXuF&i3K=O*~ zll29WJ>B({rxVU}zv&R-uO0UDX{N@HsTVBX33IQBH!UQjP*MIxx*x*Agr&-9&8e6& zbJMZAYqy(~mUdXWoGr`N_%tD$<(o*!;S ztVw-S{53QD zsas=icMO(a^v{+mk~G`0ugoa6Glovp?JahbhIM^3pF1_;@`G5TM5rzERmg%XnFQ>{WA+ff6x1q7mgFB5rK8eNLx8x1YNzhh5n`-eHFMZR5lRG|wXHgOlpG$Y!di;lfs@ za@C61aq&m~s;_Dw2Ti6tWa^h@thgcg?TGl)LI+pNc-TU`;(epl~ z69WP@#;1*HI8(YxyBI`^aGMRS=9NZg;aVE6rSQ5@vh7qBWcQndkkh7FJ+%Af>tmkQ zLz(AgMP(z?_9qFBbu$6qwEa04*&c7uo}5MVeKuP;>`9tzx{|Ko+`36-YW#g=bxfA; zIz3@z9cIT1-FxmL++txyqT{Vpdk^Vc^-#|p$~NqYK2qe5=6Kdsc)cjTbDnxdXo}*- zMK$(}^%bdiUl-s`TFe(UYktTVOl>D5OQWAPusllWYSO19J(>G4@xaNd@-!@ElKTFQ zZg1DyxMFK)pqI^ZrO&FD4TpsX%bvILmdCy{FHzntGI)qn02{MpwY z1*4Y~7UkiJvh~3s1Et8NHxW4c2|{TC2277)AO=`sEG^A3kU0kDg~h--FfbPP9R>qq zF!r0@x&J4D%M0Z&5B-0FrJbt`NkA=Eh~_Z`v9u@#U<(BNXc&#=aA_76VCt`JG;|`wr`P;&x(+@hcjSu4lt0dqqz}+13VU*Nju1)^CF_r z|F#^B$6=XPp%9aa$I`4Ix>bl3gs}{PAbN-;1Ti6;1(IQbtS@e2;3HB2I6JyIRM-WJ F{sxYYf29Bb literal 0 HcmV?d00001 diff --git a/android-icon-192x192.png b/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c189bedd5d0c177e326c76056c1893fc76f3a67d GIT binary patch literal 1477 zcma)4X*kpg9RAM?8Hz3Uv6dxAgQ18t(>h`^C^so%#xa#*mJls6)TEiov6CxHhKR|= z?r0t3n$5Uo92t*m7$jHa7)O{Tw!ZAQp56C(-uHdp_xI)Z;U&3VI43QoDg^+5G|Iuw z{j;;a5c*kwm|D{@01$tOva|7wHt&Rt^{{ z`Gj_}NnzATD%e><98!mDc(%vLK6O2;5n*s=g|vD;I;Z1ANC>*Wtu;;);$V?s9}&!3 z+t9bx8~wwX&9}Ij4aLs5!(2waJxA#S3)F6X*6HUD0<`=%bnO6%3xgE2i6Pg_)1t?u zZO~sLJ2iUhcoihV&ye{;fW*aNg^yl)j2iy5h&$(LfvH}e%u=6-{OEOZeU~YZZk#5; zj6<7h5N;Cj1xVz`dU#Ojhz+sJqVqX^Wf>7}X4-#GTH}4<+h)pqd3|m$CVZ#88MD`Y zUr|G9YNmsw63>L~-ZBpvQr9TtxTGQQ^ZBm|3z}TI%U)Z`D*d*%U>9(JS_rB9aO$CC znianbTG8_6a>SW+c#MFg+f3Q!PU3Y;yJvT|+KhE0NS3xl6)Zf_uDJ%)lPDVQLVqV6 z>3h>Pf8R0d97s4%J8y2UTM%<^-WILAl2NZ5btSRR$q-mYet5K0U@w3fnC>MIgB6W_ z&ZrPD`$24Mr4+tJS@3-&FSbfNNut^YXLYQe4aUYN2zlm$;_$g`xEgNERW0I9F)*`@ zV3ZD5^i;NPiA_Qj1#9RVe|4)aP%=CZ2qB42`?NiV^<9L%~(siesg0ssWSEl009 z2{IUaYbiFmBH2GKfm=`Q3)?7Q(`{ybNPJl&sjY&YgM7M%QDyXYxyNVaN>&Yg{fmDu z*8RXnf^g$TmKZh%#_DvJWNj9McTId`xx&XV)+FU9{Xmtx0Y+=Sa8&{~Md`pKShNE7@=L=UCB>dt=;<^qflgi7UT0JhotddADIQGUW|X2E z&dmc3OHu`bc0EQ-JI5NY)@i$J-Skb{@^(NQUTRfWJQk!c&x+nH5SSYuE$b=iJrbcY zql;;t;#F(1+h`4GWE<}BQV$(@R)A>gC}`D|B+*m% zv|C?hS$Ufo?w6a;@iQ$+^z6W)*<6afg`TuC8b#N)EFz*9?7t1#!5$iAj85HVCr4!7 zBS>z983=3CL&gQ_O6Wgyje6|4({h9ir{EpMG!M%hTBMXE6$<*pl=*T4!IP|&qS?NM z@sMR=RQpgaNo_LNQHJ5J1VkMKnBsr{Ou&PzYXRD2;I$F3p!nbQC&-z1@PWR=Kh}NO N4a)w4U8OBH`5(4tsjL71 literal 0 HcmV?d00001 diff --git a/android-icon-36x36.png b/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..a3aee545d1d18e6592549b51765bb43ec4c5eb18 GIT binary patch literal 838 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>`OBp8llA9n##Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e4D|kDF3}LZ3Wc978NlC;#wgNsw66_3zCL+j>TcGjoeS|Cf_Uzjw#l zqpR-x7xCl-7ACXJUoQU_XX|XX^qF(js;3wU-=&_T+#~_a9oq8RUKeD@C+Dr;_Sfejlz-T1u!@I9F`8@CkLcjVl??r-qnnC}Q!>*kaceMg@_7r?pa8O=I6tkVJh3R1A)}&2&rB)F04ce=MiG>@B$1T(X6B}rR2HN% zfL*0uke6=1Da;Se9N!S2Dh5L{6H60AV+%uzeO?kLflBz1%n8n{N@Xx`a+{j|ig%;fyMVtquA>swkFrkSUhq@`IJCYqZhnNS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yLU`q0KcVYP7-hXC4kjGx) z>Fdh=jD>?sPUQc`O(_fvj5eMwjv*e$lYjUtB}iO#*wd!J`q`Oy2IkLc`Tsw^e=(=B zpz&w1__Ic&d|K_jhjA;v-zb53lm>XO*jntURY{htF&Yr5S`0~`;l3z@!nXIm)4<0rF8)r;BKoS$cdz|zL!7g)G@SUN5x z{Q7V=+Mwe5oo2Inay^3PdrW>jy1t=TRww@tpW26`jFWaOOSt}FGglB-r))##oXM>n zEOke&eE9upTTWhwN%O51=I{Uh)>ox06AWpv&3U^sKSL_+rKA5r_LoXC=Gp%I{$I80z})u{Hoh_vR}EZD85kmGiY$+h-O>RJTGbNQ zh?11Vl2ohYqEsNoU}Ruqq-$WJYhV##XkcY*U}b2bZD3$!VBjqOB@jhJZhlH;S|x4` zMovC&ff^J*HWcTlm6RtIr7~ocloS+O>Fa0aCZ?wXab|M1UVc&fp7XMEfodf{YC|$g zbCayBT=J7kb5rw5tgHfnN{bl`m;c|bkEX^GWQvuQM`~tzMhSzVrIAByVJJ|IIFdO~ zHQ|{lB^e+km)9tQQmG`865q_+)RM}AR0goC^b7LR?Kg$_p_$_w0#wCdXl7z*VrXn( zXtB>r;v`TBKax4YnN_I_22M^>7TLW4N`)awg$8*tq-Ex$0==%En^%&PpRS*lSeBWb zpI5Ap2y%T(3&S+?6qB?xOT$ESlVtNGa}xujBomY5BqI}(G!qLwpbkBt`zl`F`wg^# N!PC{xWt~$(695CQNj(4n literal 0 HcmV?d00001 diff --git a/android-icon-72x72.png b/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..52698339d592f048d6151334095c401cd788c712 GIT binary patch literal 1003 zcmeAS@N?(olHy`uVBq!ia0vp^9w5vCBp3?X-pmG4Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e4D|kDF2$7#OE}x;TbJ98Uh>uX?~B>%t1h<|_;8>o+v+uSne>wMExT zO-)Sn$PpJkwo^IBv@U-YZg(s`azpY0gK~R;a6sBJ3w7mPBC8$#l*_Qy?%1;RqCg~b zx9{;j@B9X%_v_!xd~m2Orzh*?uj2Fn9&*0feb3{ZXI-Pp=XE`-im64 zJ3eiQUlGL0(fqDQ$^_)-E5;fx4qw;zco1#2ldaR*QkhxYvWWK(uZKy;OkvRt6S60~ z{pG81p#M$8?_RA?iw76&LAn;RUA(YhI$Och7jGBK?C4Pve7pGfs)DC_8M@m%cJLVL zZd<#j;AxR~;Mxm~r#GBYOSv%r@-`k0fg0h9JN|z+XysH~y!SV|TyxyJnG;poQ}~!C zR~>tEx4+Ry|C{cK>#1(jgt%Yctq~5lu9gya`#i64;$A5YD^^+$C&w%mHpjzS@QIe8al4_M)lnSI6j0}v7 zbPY^&4J<+o4Xlg}tPCx*4GgRd44mb^1fpoj%}>cptHiCr$jRp|P=f-kM%P&gbb6$2XP^|<=ZAeCGZjzOiOMY@`ZfahMl~n*x zX)%N0^8dT_(bRZ?OtG@^NX<;oC}A+PG;)Y73-eE%tdyoCGT2M=~ckvnrLr zz{zRKBD*(0sW2p|&>&BSw9K4Tpx5WMpEJW@4cS)S(A-U&ZTtzkxO|c)I$ztaD0e0sz_NaFqZ6 literal 0 HcmV?d00001 diff --git a/android-icon-96x96.png b/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..1e715bf1613323bf97503fab5fb87e1d32c0c8f2 GIT binary patch literal 1155 zcmeAS@N?(olHy`uVBq!ia0vp^2_Vb?Bp8l=)_4M>SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{Xiaj ziKnkC`!f~}E;*6^A2+1{<@G&X978hhCI9eGK46e_a0TmPv7RV{PdYz-e|xHZ=Yh1x z$^P&k2g;em_H-JV9pvGr{ z>FrLVq>Pj&=Dq9ZSIRDVa&gZy5otjmRh~a;A9**w7wUTwpU-!!c;W85^{+q6pYZy2 ze35oy+3k)sEcIHyLQeF&`nO`bgqK%jfbNHSmk_O{rrEDFW~KTiY3*FzzR0EGetnS6 z52?OIxBoIPn>623!%HWAa>~K^Od@wV?KiH-bO;ps)T+Y$FLd#XbHAEhefhndy8il2 zV*Q^TsB_|Anxnn&rb!mBqA!@k{hD=9VY9+_c`;St6&a0(x4e`{NaIlcs*{j(kSV~% zVIiwagJWK!8;@Ft>B1zLl-j@l{z^;zxN17(6D+VGCS5quB&DRYV9E0T+gXk_O^J`V zvSpD*=MS$*toA~ICG0iF9<{}YsOrgkY}co8NvOpc6XfWnFg+kP3LQVbuW4H`l^(miE51Jal1c?IS1cwJ{^5% z%7wPa4t!HSt(>*}HLJ(T-OSxmO`?WV4Z3zuKYR1LKML^v_5KHxK9(%PV$ z9U%rAI@TzpG;UsD;iq88y(DG!B8fazBW+IBi)+0r7;gNRU;iMm@TY9x%8peDSDFI3 z-E<|k!Wc4Q3=A#Ly$^ot6Z#HJO{yiX5hW>!C8<`)MX5lF!N|bKNY}tb*T5pg(7?*r zz{=1<+rYrez`$AlOCXAd-29Zxv`X9>jGTPl0yQXrY$(o8D=AMbN@d6>DJdwn($~+- zO-xS(;>_f1z5Jr|J?CZT0@X@@)P`h~<|bKLx#TC8=BDPASXl)Cl@>D?F8{w%W1gMI^(9Fcr#L(En&|;sL#7UqMek5~(GpkY=44j;%EV6q8lnO(V z3JvmPNXyJg1$tdSH?JfoKV3g9u`Dw=Kd)FH5#;)o7KUl&DJE%YmWGMuCduYW<|YP4 lNhT)ANk%3nX(kqWKplEO_f@>U_Zw&fgQu&X%Q~loCICR=xikO( literal 0 HcmV?d00001 diff --git a/apple-icon-114x114.png b/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..37b04e27a54a209629031a85fb319dd9cf712467 GIT binary patch literal 1258 zcmeAS@N?(olHy`uVBq!ia0vp^MIg)pBp6n0yR{HVv7|ftIx;Y9?C1WI$O_~uBzpw; zGB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHrx4R3&|Mvbf`++?6 z5>H=O_Gc^{Tyi4+KW<6^%1`rjaSX}0_x7f*he)CX`-k%VTTEg(7oUkak)VE5BbrH7 zSHoFDbA^I_tW`-Q6R#kTNz03X4bu<2m@u7BaANK&MGk(}HkUPl!8@L@=WaU|^h~ek z#g%hx@2fh#C*Ln`JGNrp|4jb+dH467IkRau|EV>V0uvmVI8}f|<~*NO`7Se$yS|;f z!D6G1t6f-4Q^=P`k4`si*ij$URkMS!^HN*)`O~dOW%HMwxPEZj-luZ+Cj9AgIK7iG zX3kri%PT5m=PWwBS|;P|Kb`X5OSb-qxF7f|(%bKDo#Fbw24UUW+!q)6?VrpVR>tGH zf2~B(cK*JPsv%zdx9Ze?z83fs)jwx}Z~EsMd5`*Hd+)tgV;B8yeE(~Rvg@@~Gi4sy zO`jb4WWlrbZ=S9F`b2TPG*D>L%CMpU{`7zp>5F&1=uAJM{g^{l7GL zS6?iLQE}bs*d;X$ChlS)n}eTh>i$x~&u>(`{+OOo{e;U~zAjEUd-DHdV=<`aMiwLQ zTmMR5^Z&WHHeQ8o=g#`)@0Dg<4a`>AyJg3j$f%yl-rZ*xUpt|(b(ZC!$g^JpSI^9z z7G@kJzO_MX*U!0EL%vUR-ST^C<)s-fKLs@hL}v6={l4WP{CDw%iw1Ly9G3+besy$T zD{Z)G-MgTOUi~!w?2OKt%gz1r6Ga1Ge!OrZBzm0Xkxq!^40 zjEr;*Omqz_LJSS8j18;|Ewl{`tPBjC<-Y`?Xvob^$xN%nt-;92=Pgi!0?3Bq{Irtt z#G+J&jFOUqVk>?9%-qEER3Oew&eqE>O5bx{b}mq@1W0X2Mrm%6m6c0=a%paAUWt`e z08nW$gW>Z3yYU0q~!7%MNs~i zL{j3LnVVWtS&+&Ac9niXUb_9JFh4YNd_#b$7!1u!EKLlJEetL8c}biED&a>mCpfbz zmBGNtY04tIH$bT{B&pCKPlmM2oK&FK^>gz|a`Myl(-O-vlk@Y6^$|g?Z)steW}ae_ zmS$;~Xl{~ho@8!fV3cHHlAL5@Vv=TJp$F8V2XtS>>wCX}HZXX)`njxgN@xNA(bM@R literal 0 HcmV?d00001 diff --git a/apple-icon-120x120.png b/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..772a64034bea483e6e96b5c65fddd4292b8b1213 GIT binary patch literal 1328 zcmeAS@N?(olHy`uVBq!ia0vp^6(Gz3Bp77)Gx>lNOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>MBZ*S#$2q((0f7qS-Hs2y+`j$jXWi27ogZDxL z0uFYx+!K`$3>3@>$YSM8JfiZl)ip(AiU}{%>@P|y9e9PRCr0NadR|a+?-iOewnhnsLngS?Rnyn{UU4$4UB9OAmT^*vG%LN^QNp?*-`cN zrbnC5zO9FzhMYbXw^C|tV6N5l-2V=o@ur5WHnJ|wTH&+zRLF77hmE$g!wT6R$y^Hy z+L&A)v1;Gvw`=rtlR9JP-i_V7TGNyB^UEi*+jXPQR$Qx95%BU!uUM&-5;Q-q#C+Q8 zk2yzAJ~;hx<{Af1?~|&xVrE2ke``yxTkC0Tyx2}U&vMV=n|tQHk{7RA>tUBu&UAb3 zy6O78_kKr)aQ!Tv^W{XF=y$#v{OmF+GPyHxxHEAy`#IkOc)_RCB=`1_g3VOz11 z8y6#kzAOC_kUFQm+pA!I&P0FV^-2voM%jDT$;uTi_+UBj%3HU0eA!$X?emK?-iUkL z-5n@e1Cz@KC0)CddKWm^Ae7n z9C4SU8VBaOl`LPY=epuk`b4$W*_UdL)+l!$3N3UhUnREJvM1e3TBqY;(M^NTOJ&}% zaUHV#sUNk@UBu+z`Yc21hpO8z&&bPL;1!pu^?P&W;hmisx2t5+B!X*R9K4YqeLczQ z;}el@D;T10efaS=NAAP%d#8`vrvAA5J%3~VitK$i&G)~bFZC+Raz~}+%2QTmav#ch zFUuW&@xbTFW453#V%KX|O0C=?HDz_r!CkH2EZlZa4D9{-yO3vl)zp6$#~v8Y&w8aC zWLkG@b=22wenE%+$hbbU*JScFoqjy{uR4>#0S0Cs81et`hw$SyW-8{HZI6ISU$w+F zq9i4;B-JXpC>2OC7#SED=^B{m8d!uF8dw<{SQ%Pq8yHv_7&yy+2}IG5o1c=IR*74K zk(19`pauny4aNCsCFO}lsSFtWfnL|o%`3^tPuEXNEXz#J z&nwnP1i8MYg<+a`ib-0UrD3AENwRs8xru>Ml8H%jl97o?nu&!TP=_ASeHE|o{RY~= N;OXk;vd$@?2>?~~4eS5_ literal 0 HcmV?d00001 diff --git a/apple-icon-144x144.png b/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..5e6c54173af9ef82e341ce50b0985122e80c881d GIT binary patch literal 1578 zcmZ{kdpOit7{`xGE|u_5Bs48H*_avqHZwmmGcFl18h2V^jJeU6!H7tsp~PyDR8L7m zgjPh#%4Igx(4sa{Q3`Etjmx9mBCR_m<> z0H`^W9Xt@5wLDai4`?=T3`LA0i$oy-P?fo6fwl_qQFO8g1%UW(0Z2*#U>=!D8U-K* z1HgDN0Pr~gbohC<-EEM7e29ya16WGU?2sUyvcQ?*sQgAzWwoL9(o8iXuF&i3K=O*~ zll29WJ>B({rxVU}zv&R-uO0UDX{N@HsTVBX33IQBH!UQjP*MIxx*x*Agr&-9&8e6& zbJMZAYqy(~mUdXWoGr`N_%tD$<(o*!;S ztVw-S{53QD zsas=icMO(a^v{+mk~G`0ugoa6Glovp?JahbhIM^3pF1_;@`G5TM5rzERmg%XnFQ>{WA+ff6x1q7mgFB5rK8eNLx8x1YNzhh5n`-eHFMZR5lRG|wXHgOlpG$Y!di;lfs@ za@C61aq&m~s;_Dw2Ti6tWa^h@thgcg?TGl)LI+pNc-TU`;(epl~ z69WP@#;1*HI8(YxyBI`^aGMRS=9NZg;aVE6rSQ5@vh7qBWcQndkkh7FJ+%Af>tmkQ zLz(AgMP(z?_9qFBbu$6qwEa04*&c7uo}5MVeKuP;>`9tzx{|Ko+`36-YW#g=bxfA; zIz3@z9cIT1-FxmL++txyqT{Vpdk^Vc^-#|p$~NqYK2qe5=6Kdsc)cjTbDnxdXo}*- zMK$(}^%bdiUl-s`TFe(UYktTVOl>D5OQWAPusllWYSO19J(>G4@xaNd@-!@ElKTFQ zZg1DyxMFK)pqI^ZrO&FD4TpsX%bvILmdCy{FHzntGI)qn02{MpwY z1*4Y~7UkiJvh~3s1Et8NHxW4c2|{TC2277)AO=`sEG^A3kU0kDg~h--FfbPP9R>qq zF!r0@x&J4D%M0Z&5B-0FrJbt`NkA=Eh~_Z`v9u@#U<(BNXc&#=aA_76VCt`JG;|`wr`P;&x(+@hcjSu4lt0dqqz}+13VU*Nju1)^CF_r z|F#^B$6=XPp%9aa$I`4Ix>bl3gs}{PAbN-;1Ti6;1(IQbtS@e2;3HB2I6JyIRM-WJ F{sxYYf29Bb literal 0 HcmV?d00001 diff --git a/apple-icon-152x152.png b/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..9849237a9025d0c934b0800bf36bb62793dc00c6 GIT binary patch literal 1673 zcmZ{kc|6o<9LFDplxf?jOj<{yCgqsZH9L`MY?MKcB*)ItT&|hnhmbHtC|X;s6gKTT zHcHariZzbp80Ad_w#*z&-eL02@ZA#)~{1v z2LM=aV@-90ZJKN-!4I%EKXMT^@?1-rB>=Zmls_;O;JG%-+K~o87#e`6SODhXPf;%c z2*Ls|N(X=h3#bXNmK`R;j#bP<2dH22AI0@HdLD%>vz~9P24+-Uf$G>#i-^uIs6kSaT6&?TjFz^7AxTEsmE0KxsLSAcU$A;?xE2%R?Bp4 z%_F6(sa#v`Et+SqH?k{BqI`y>JorPoiO1N{Yo{b$SLSL>_5a!)_jvwrii*Y!R8fkX z3X3-J=Be-VB6@%8Ow)*MYKP^^+`Xio5uG`y%F)8Y7k#a$kYkSel{rhzxX{VB;z8B# z5t5F7UXA&dmst=r`5U6&U$%0Yc~!nB3189@2wV&7vn#HjNs^L3}&nV3$z0NYyan&a$XOlhhjB2`L_8z-spqEk3Y~;o| zggHgoF{4h$J-}ZkM-^RjUzlMJ`()OW1N*BH`f=Yzh8T;$koV6S_roZvk5qkGYCj%Q zLpL?BLZ8~Y&1IPHTVM_6;GNb;!VmIjA^CTs|Zh(T)pS$UXE$y*7X`d_)4Wu$r zz5`C}bWEysd)h6f(dx%1RP_6O)C(dM*P@-9Ct2#_Mr-3@3B`tIr$t`! zAB(c0K45iPA)^!7RB}}D#*^^opjs7V!%qX(U;Mr$;m)dhGgXg{9kn_>bR9(X_?qVm z8QMwoWMqbQSM__^U9OL=S-7EVi9EXNnRd<&UQfm{Q6ui+{@D*ZZ&oiGemVf3=lWGT zcR-OKs_SpsG&ps8Pi4@(g)`Cyyw_z#pUVf;fkvl$ryJ!r5g%h4V{}%hv`tehLc^D? zyzx>mPrV=*AsQC?Z&*x>2vB7_AGHncm7QL~uooG6`8vHS=oPgky<~p=ewFukbmW>UazV3w+WQCM8QKAc)qcEs4Kl#yt9!7&2|e1YkMYJhF`d&LXx9LdSk5gxaZU$ zZ;!r`>5Becua=02sm=B024`lMs3>Yf;kogl`4V*Sg=$BqlzquB=M3r@r4^5+^tWYw zEmhXlTQznxT7LCiH+zI+eriYjBXyhR`N}$dr}N!D@U|gO4V8{FTG-M>`h%`Ngb9@+ zZ~8{@h;5?o;I^XJ04>7#$b!XqJ&u>GHa!Ni(u{ABb!o7&tY6C&;Lc6!XS#P|{B$Ot zW~1A=@SU;~vN{SKXFzNcD}W6ffXCwT23Vp2*3=n?B@wVBoT(lbOTuFJYfT^iEWl52 zoX-jU{{TG2b^;F2mSqSOaG(%I02}ZiNEk@MVEBFvE*l-@cTSPE-<6ELgy3X%0CYA zWJr6#cG>m3bp=A>`>~-=Asc*L6-MaKwJ1Jf_k|A48KwZvm}o}C5lnHW4-X<6VPwM! z9VdPm8(=Av3)$x5uaDRl9_cmutm literal 0 HcmV?d00001 diff --git a/apple-icon-180x180.png b/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..48e34d735b16785812786555279f7004b4807fe9 GIT binary patch literal 2066 zcmZ{lcT`i!7snq$2;c%sFH#hA6%|r=N(hKlL!?L*6%j~CTX+P?1H=f2=28S%*X%}+ zj#6X+5rn0P4OgrLl%iCPN~od)5K!31p5Hk?-97uq%zZQWbMM@l^F8;ay1A0%<+SAh z0FWm;+It|jZf(dQ6QEggcp5QM3>z040I11a|2YtatT$2}JzN0bf>Ba#6f6;{FQRjJClNO_LHSs56XAaBCMUa@1w|CW;z! zo*h}(@=LB)(#baMvK4joykJZ=-AOJpMnoLvpJj=VZqJ! z{#TcChG!c)Vh9WAoIG@=mL@m|SofR9NrMH@_tuiyg55F&67tLqQi3??I{9_X4Fzg1 zyi&T?rEP)xyi_YtLC=`B50*DLUz)5D;y%ux@2O2>=-q5>35sfnuJag+AiE}>%OO|) zDM++9D!VT;is*NCxqoLth4SX)vV9{?m&!$|jNZ&*-Ox_!cqU3#<7i!6l`AYOLrM^< zK*_mPykJowgC5-`+M$E0s#h79MmuNLWm9*lMQ5!abxbMsOxHiJ@(0DzTWPB zMZKzVGpE&OB(MTHYINq>M>DHM*L)Os+3@zPzkXlKDUulkgJnb91a_9{jvbpL-z0cQXa5Wz5}H zUtC2!P6yqKw~bG(&}t7no7}!=<=kB&mo*^lUYB%ik>Kl;ahwuinsp^1bxbMaVd&tS zJKBC$1D7J(r=4RmPQC4Qqei*7sZDr(>fC-YPh88j*YbCB;GRm+iS2!4zn-v=BZ1$V zEpRiQWy_xF=avmI_VcQ|6K-7@ImK;D$(r4sDKKm(EGNkoM<+)-;XS;IG1p?IcV(yl z9Nj4giA_6K*kvmOqgOvk^-Nly=D$vCy{cXFF3868zN1PPudQt3>xakAdj1p$7W$ob z7H99)1NYnnY6TIJOZ;NGV9&kB)vqJ?e+Z_=(&ZFd7~8BwD<1K?O3kDi1@V_3pNoB) z|EU1|aA$Gt%=1!3r71MHrjj+itSRT4PtgY1K^Mb@RoK=7I&Jd))s@cc&#jnAX|4@9 z-5vR*_(Q8+`3kTHy+`>=(BNCT&R%0?MV31F?o^m`zw91E(#d^AHSHP~^bU589kBHF zthlI~S-NpUZmAPS45R0|bVH6%@-h6H^*=c5t-HI=Ur5z(Ug~v|=H2wui)H8{xcns)!qCNN(R2-;$p!UwQl8!1`AMiN7m&&t1ufeVQMA zOhr9jex5MH+}rq+yQyq$X`F5tdGuF_?ZNWD8k{#>ob=mz6}yn3F{7$gavQ zcihoB1&xo{YFDP&$WIt%-E`M zNbKXF1r1H`>+;o=LX8$TYfhb&tZEc?i`qxt=ifNtpC-wQO0BstS^arNJbbsXQ+75f ziDb7b?W+6o!t}G4J17fJPTs1xcj%m3U)OFwhSkevBlhuYq>;XU5+rnOnj0eJ#nx_$ zTr&8mPa3aCo6dTF{!=7cS@{=shw<>@G2zw2VB!8Loy^S?n>XC=wspCM{h|C$Hzmf+ zu4A#~7rR?Ux4eOJ`5KYqIzNcZYjh>j&NHAMMGi>6S~XN+{9;GCe*TS+VEzm9%93i+ z0L$F?!ajz>646;z29BIKRyxG&Hww3O*)?Z)u($Ho6MWaa{5KuYTJoi|1fp>$5kS;l zZv!B@@89@$!~9t*bwv@?!p$vJh;Bxj`xe;Y5F8W;(}>h?8e#xE7LPZ^g2q^a7Y<7_ z#S(FZ9at<8i?!1iyMGe^v4dFj=>HDD+d5An0UOs&;IQd%RA4v_V8U=1hls(jpg;x< z87ykB2|Jw8(xID+u$pVE7c&B)5Q+9|Y6L_Jg^5Hr1mys@($!|nKN#{_79!D+#$qsG z0B4T3_B-y4FdARw`5)uM3WAwy$g|%!t^FspzCv7B5DktFqXB*06`SL%Hzp8NdvI9w!9*%NyK&VE0?zi8KAR5XvozuP$(S2 zW?<-nkt`}Zl!N*IlVi*YIJ#L7NT-|Q0?k0G8O035;wd0VrQku34iZd|2ot2f6B9$r P$O!=1!PUOXHXz|I*v^Yl literal 0 HcmV?d00001 diff --git a/apple-icon-57x57.png b/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..c8fb43b37b3d0855077d88568ea0c73743047d88 GIT binary patch literal 941 zcmeAS@N?(olHy`uVBq!ia0vp^mLSXlBp6l}--!fLEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e4D|kDF2$7#JfxT^vI^jwk={*GrJNYB{5{uA+yxCKho?u|^ne|in`~ScH>q66eIASK; z+>&%mb~i2`&%*WHjkPOi&3|$=Vo3=GB)xE}lGb zs*T~yk{2mLB907lKpB0jIuSO%kO?AA9+Ch5&p9YJf3a12yI+N5y^v=Cmtks+wX%!g zZ>N?U??WQ?7BMV8H@|x8!Y+w5{{Nb|>LQi+gn4%TV_$u4^45O^raU}G2e01#|F7QM z{C+FH-mw)@H%r*M@1YGztY5E1YH`SJg%eJw1T7PO?Oi_Kl1f7gw1`#fN1J${#K za?squsYAtJRdLAk120(^RKETG{36523K;IHC9V-ADTyViR>?)FK#IZ0z{p6~z(m); zBE-*iRLEB r=1Jxz21ZFHCdo-gCMIbn7J5J(dO-J8yuSAvXaj?%tDnm{r-UW|Xwg=F literal 0 HcmV?d00001 diff --git a/apple-icon-60x60.png b/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e965e6d4a15b901791989a07e6614a0b46c9c1 GIT binary patch literal 961 zcmeAS@N?(olHy`uVBq!ia0vp^HXzIaBpBqUx2*$GEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvnvo}5L1%3y9>kr_Wm>bfjssS zPhVH|XDl3Caw7jfZc1TbV9fP&aSZV|p8Ug~F+t+0%_fukt97*W9GQ-~n)3hqe?P84 zDIzH5#z)TXXWYk>*6?^V1mF2~>i_@CQ(Gb?xb9T>dq3ggpVv39x|$WZ<~+2{+xO@1 z|Nqn7r>A8cbloZZ?Oxqq@%H)pD-TWCxzDX5PrSKPt?r<3LcP+0RWp7~aM{m(xMq`7 zen$GCn7v$)ChS^TMJ(%|#jG&;_VvV~p8>tr7vBf}OjvYp`~Sr2 ze=5IUaVc~;c3op;@r&30|M#1JbN_Idb!N%wXLJAbx_-`ds1=d-)ig3x}SHmgUc+Z`uqR?U%$RsR9*joD_7{?if4gm4~H5vq$~5E%R77u6y2&N zt`Q|Ei6yC4$wjF^iowXh$Vk_~MAyI~#L&RX*ucurLfgQ=%D})`{!1W=hTQy=%(P0} z8jPHL-U2l!fNUtvPb(=;EJ|g_C@Co@w$j(n%uP&B1>(%)Y`y%V^gZWg=K|GAfYgR$ zl;$Q`S-IpVm*%GCl~`E?0F@Rq7%u<6TOUo0C&&~lE05I7^o$Y)LrWuv*uqet8gV3Z zplZT1Q%W*GN-nQa1SM-pBqhF?xv3?U1*r^RSLqkzrQ2@`^FuSoHw37P!O+aa(!|i% z!q8%$m&8e+5`H9ef-|d984R49rYy311C$Cwk_rv-WJt@*Nd!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e4D|kDF2$7#OE}x;TbJ98Uh>uX?~B>%t1h<|_;8>o+v+uSne>wMExT zO-)Sn$PpJkwo^IBv@U-YZg(s`azpY0gK~R;a6sBJ3w7mPBC8$#l*_Qy?%1;RqCg~b zx9{;j@B9X%_v_!xd~m2Orzh*?uj2Fn9&*0feb3{ZXI-Pp=XE`-im64 zJ3eiQUlGL0(fqDQ$^_)-E5;fx4qw;zco1#2ldaR*QkhxYvWWK(uZKy;OkvRt6S60~ z{pG81p#M$8?_RA?iw76&LAn;RUA(YhI$Och7jGBK?C4Pve7pGfs)DC_8M@m%cJLVL zZd<#j;AxR~;Mxm~r#GBYOSv%r@-`k0fg0h9JN|z+XysH~y!SV|TyxyJnG;poQ}~!C zR~>tEx4+Ry|C{cK>#1(jgt%Yctq~5lu9gya`#i64;$A5YD^^+$C&w%mHpjzS@QIe8al4_M)lnSI6j0}v7 zbPY^&4J<+o4Xlg}tPCx*4GgRd44mb^1fpoj%}>cptHiCr$jRp|P=f-kM%P&gbb6$2XP^|<=ZAeCGZjzOiOMY@`ZfahMl~n*x zX)%N0^8dT_(bRZ?OtG@^NX<;oC}A+PG;)Y73-eE%tdyoCGT2M=~ckvnrLr zz{zRKBD*(0sW2p|&>&BSw9K4Tpx5WMpEJW@4cS)S(A-U&ZTtzkxO|c)I$ztaD0e0sz_NaFqZ6 literal 0 HcmV?d00001 diff --git a/apple-icon-76x76.png b/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa1b7868930f98af2c513c438d55e308b8ec27 GIT binary patch literal 1061 zcmeAS@N?(olHy`uVBq!ia0vp^J|N5iBp4q3;rkAxSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{Xiaj ziKnkC`!f~}E;*6^A2+2iFfd;9ba4!cIGp^$-}Qh&){Pa3i`yIz+;2C}OJbI9D0;ua z>+X)<+|v`~|Ei`wxzM;~%bTDDcVr|pBY7+(H9uGH;Q1Ytq;&XH1J?|fuXoBBpPKD{ z)nTykh@wv1^h4uP@je@>;qTDfl57i9Y z?glnxKe*Yiwq5vP)>`)?5@q~?27B5sJo#2|_~{n;;H(?(0uQ_KN}Kk?9OhemGH{al zPVxIY+IaHLJyyAI;1-w}qHxG#U*ZpjmwJyyomlsX?C8mUb@A|t2O0Lq6*|v4&dG2G zYRGk~+wfX&<;` z-%*7n5z7S4-n^D_`8}htasPAEMb|&PPu13+H0RW<^FMfg7gy%4p3cB*^k9QdbjbtW zfOk*#wH{4-qfzwdUGHkY{|8cUxQBnaC&*#&QIF}=*(V3JmKTdpPmG`aSjfP!<`Cn8 zJL_0-6xRJuvitLG_$R)Kn9$Y=C$;hk=)w!K`F=`|O!n8-VexTH+c} zl9E`GYL#4+3Zxi}42+C)4NP%Llg96Bg;{3Fd^2DN4hK!Puf?_Lu{mk6N^i&|uOwQKJFG}BYUUn`}tprGINJeRH zl9iQ9esXDUYF>$zRRBPq1*#E8G6$+A zJTs*v1El2g8bwgnkwjABo0*$hQdyA70CtsrL0-E3rZ7J=b9_U9su&E-Oe{?djV%l< z_IXL11S;W2GAB5*DwV;&$!W?WyEj0oFeItaAWw$0%$!u9*Y$JrN^WMYzLVxb4rp$Bwd#p`>&fi^IB My85}Sb4q9e0JeIP?EnA( literal 0 HcmV?d00001 diff --git a/apple-icon-precomposed.png b/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..7d884ca93df209a35d0530bb7b7a25d66bb29f0d GIT binary patch literal 1909 zcma))3ozUH7RP@Qn$YU*QqQjCR;dl*?@=n!^(eREQE&PXNf2a91W|2Kp;Zknz1FL} ztjAJPx7>|x5lVK&E2v_s8d7S#woAohk!9I`cjnIY&YipW{$|ea%sJoBIluFpIc(1} zrxg`66#xK=1ZPKY*z?~T8ooe6qxm@OWW(*jnV7 z!YS4Q0Pzq2Z^;1QiU3e!6!X0Buz(15J?#kgGIILc;RwYfxI3ZdWYG$rsodH~TLnPw zHo?)}_p)fII61!GTJhrD>4~%nRrOEKUvSe-te{=yzm34={U2dj4KPv*i0l`zqjKYN5pF0s zWD~yS!7jJp#FtU6Hip-h*(>hxh23T}8gZzzBT)zGY<1TuCUkgp-N5eHt8d)|BCFT} zGg-FEU;K8tPejwwzBykjQp3B+e681UzxW+r+u_^db0OyB z8a6@9)^E$&>YJqNnfK4`Y<8OH$FQv((lyA~6vwtFgn<<4%UmP(w&7(?^jdVw5Cxd4=vdMAO@FQ{F+di2=b++%ki~o zL5azI&AEe7>m>q?{cHeRq=aX8)(Q&o->i}}xzBpNlk$t?>qq`%jDJaXLts5wvVJjN zmRyM8_jt?mH!2W2P=HdOP<@7FT$ls)u1C~Fets0$g zeIwcWPC0?Kl+xJHh0a-6Lr2(m&k?)z;|M96qo-V*zfU*1ju{VH)ViO0aPc*FG+dG=AN{?k<^s%V%R*7=r-6HH1>RVaYI|>NMmIx=gzKf$K!lk ze+#3%8i+%mX;0-81dq-ZWjR?LQ*)FeSHmuZk9IY;N59S01%Ll5WKoQT z4B2=flNzj#GPv!@yyv^!{z)b_i|!(;^YOt0i&@pFrQ)F|b&>K&=p=u+e0FeQg7z+* z*)>|kK0F!fa**q-2AKN+PY#F?EV_(cBPhE7o*RP&)&HIT4SDh>?8xB9e{F)-Mvv)q zmKjQ6QgI=%RM-JC$jrcFlGWJmI@-6Ohz2e#Do?_38%tF3%Q7mjty@e)GC2l_4llAM0`{*4(Avh z5+6mSGjTXi7>xs_)q5=_Fr)ebLwMf>hjXUV!XuafBI~*qz=Xpu2&;hLbjGpHft>a`%%?0b literal 0 HcmV?d00001 diff --git a/apple-icon.png b/apple-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7d884ca93df209a35d0530bb7b7a25d66bb29f0d GIT binary patch literal 1909 zcma))3ozUH7RP@Qn$YU*QqQjCR;dl*?@=n!^(eREQE&PXNf2a91W|2Kp;Zknz1FL} ztjAJPx7>|x5lVK&E2v_s8d7S#woAohk!9I`cjnIY&YipW{$|ea%sJoBIluFpIc(1} zrxg`66#xK=1ZPKY*z?~T8ooe6qxm@OWW(*jnV7 z!YS4Q0Pzq2Z^;1QiU3e!6!X0Buz(15J?#kgGIILc;RwYfxI3ZdWYG$rsodH~TLnPw zHo?)}_p)fII61!GTJhrD>4~%nRrOEKUvSe-te{=yzm34={U2dj4KPv*i0l`zqjKYN5pF0s zWD~yS!7jJp#FtU6Hip-h*(>hxh23T}8gZzzBT)zGY<1TuCUkgp-N5eHt8d)|BCFT} zGg-FEU;K8tPejwwzBykjQp3B+e681UzxW+r+u_^db0OyB z8a6@9)^E$&>YJqNnfK4`Y<8OH$FQv((lyA~6vwtFgn<<4%UmP(w&7(?^jdVw5Cxd4=vdMAO@FQ{F+di2=b++%ki~o zL5azI&AEe7>m>q?{cHeRq=aX8)(Q&o->i}}xzBpNlk$t?>qq`%jDJaXLts5wvVJjN zmRyM8_jt?mH!2W2P=HdOP<@7FT$ls)u1C~Fets0$g zeIwcWPC0?Kl+xJHh0a-6Lr2(m&k?)z;|M96qo-V*zfU*1ju{VH)ViO0aPc*FG+dG=AN{?k<^s%V%R*7=r-6HH1>RVaYI|>NMmIx=gzKf$K!lk ze+#3%8i+%mX;0-81dq-ZWjR?LQ*)FeSHmuZk9IY;N59S01%Ll5WKoQT z4B2=flNzj#GPv!@yyv^!{z)b_i|!(;^YOt0i&@pFrQ)F|b&>K&=p=u+e0FeQg7z+* z*)>|kK0F!fa**q-2AKN+PY#F?EV_(cBPhE7o*RP&)&HIT4SDh>?8xB9e{F)-Mvv)q zmKjQ6QgI=%RM-JC$jrcFlGWJmI@-6Ohz2e#Do?_38%tF3%Q7mjty@e)GC2l_4llAM0`{*4(Avh z5+6mSGjTXi7>xs_)q5=_Fr)ebLwMf>hjXUV!XuafBI~*qz=Xpu2&;hLbjGpHft>a`%%?0b literal 0 HcmV?d00001 diff --git a/blog/1-17-breaking-episode-1/index.html b/blog/1-17-breaking-episode-1/index.html new file mode 100644 index 0000000..743a653 --- /dev/null +++ b/blog/1-17-breaking-episode-1/index.html @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.17 breaking changes episode 1: preserving a custom gitconfig | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

1.17 breaking changes episode 1: preserving a custom gitconfig

+ + + +
+

Before version 1.17, when Gitea needed to change the git configuration, it modified the $HOME/.gitconfig file. For instance it would set core.quotePath to false:

+
[core]
+	quotePath = false
+
+

When installing Gitea from docker or rootless or even from binary this $HOME/.gitconfig file belongs to a user that is dedicated to Gitea 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:

+
[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:

+ +
$ 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 impacting Gitea installations relying on networked volumes.

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/1-17-breaking-episode-2/index.html b/blog/1-17-breaking-episode-2/index.html new file mode 100644 index 0000000..c968e83 --- /dev/null +++ b/blog/1-17-breaking-episode-2/index.html @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.17 breaking changes episode 2: preserving a custom gitconfig | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

1.17 breaking changes episode 2: preserving a custom gitconfig

+ + + +
+

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. This change impacted a large number of Gitea installations because the docker image tag latest was set to 1.17.0-rc1 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 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 as follows:

+ +
$ 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).
  • +
+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/index.html b/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/index.html new file mode 100644 index 0000000..a014e64 --- /dev/null +++ b/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/index.html @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introducing Gna! | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

Introducing Gna!

+ + + +
+

Introducing Hostea, a project Loïc +Dachary and Aravinth +Manivannan are working on to create a full Free +software development suite based on +Gitea for the forge, Woodpecker +CI for CI/CD, +Pages for static sites and +GitPad for gists.

+

This talk introduces the projects goals and philosophy behind the +project.

+

Please see +here +to learn more about the event.

+

Details# +

+ +

Resources# +

+ + +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/slides/2022-04-22-forgefriends-introducing-hostea.odp b/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/slides/2022-04-22-forgefriends-introducing-hostea.odp new file mode 100644 index 0000000000000000000000000000000000000000..60017d9fc6cfaf7db2730cbc7bd3e7f35ffc19fe GIT binary patch literal 252842 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¨xWP*z0`_{kb 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�JCsMZflxG`QsWM*uZ_odI8wYFYdi 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�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 Ij)UgE0SMbnLI3~& literal 0 HcmV?d00001 diff --git a/blog/atom.xml b/blog/atom.xml new file mode 100644 index 0000000..3c97da6 --- /dev/null +++ b/blog/atom.xml @@ -0,0 +1,758 @@ + + + - Posts + + + Zola + 2022-07-20T00:00:00+00:00 + https://gna.org/blog/atom.xml + + 1.17 breaking changes episode 2: preserving a custom gitconfig + 2022-07-20T00:00:00+00:00 + 2022-07-20T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-2/ + <p>On June 21st, 2022 1.17.0-rc1 was published and the location of the gitconfig file moved to a new location, <a href="2022-06-23-1.17-breaking-episode-1">which required manual intervention</a>. This change impacted a large number of Gitea installations because the docker image tag <strong>latest</strong> <a href="https://mastodon.online/@hostea/108514134565401798">was set to 1.17.0-rc1</a> 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.</p> +<p>Unfortunately moving the git home directory in 1.17.0-rc1 was implemented in way that created a security problem. The <a href="https://github.com/go-gitea/gitea/pull/20114">fix that was merged in Gitea</a> to fix it requires moving the gitconfig file and was released July 19th, 2022 in 1.17.0-rc2.</p> +<p>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 <strong>latest</strong> 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.</p> +<p>In 1.17.0-rc2, a custom .gitconfig must be moved manually to the <a href="https://docs.gitea.io/en-us/config-cheat-sheet/#git-git">new git home directory</a> as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Data Root Path</strong>/home (which is <code>/data/gitea/home</code> in the example above).</li> +</ul> + + + + Get a Gitea instance with CI at Gna! + 2022-07-10T00:00:00+00:00 + 2022-07-10T00:00:00+00:00 + + https://gna.org/blog/experimental/ + <p>Hosting a Gitea instance on Gna! is now possible (but still experimental). It is meant to be a minimum viable product: anyone can <a href="https://hosteadashboard.gna.org">create a new dedicated Gitea instance</a> within minutes and pay for it on a monthly basis with a credit card. It includes a dedicated CI based on <a href="https://woodpecker-ci.org/">Woodpecker</a>. 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.</p> +<video width="600" controls> + <source src="https://cloud.forgefriends.org/s/xXLcYpsE469tJEj/download?path=&files=hostea-screencast-vm-create.mp4" type="video/mp4" /> +</video> +<p>The service is 100% infrastructure as code, published as <a href="https://lab.enough.community/main/infrastructure/-/tree/9e18ebbf675c8a65d1585d20b4cf6295af6e52ed/playbooks/hosteadashboard">Ansible playbooks within Enough</a>. It can be self-hosted on bare metal (with <a href="https://libvirt.org/">libvirt</a>) or in the cloud (with <a href="https://www.openstack.org/">OpenStack</a>): follow the <a href="https://enough-community.readthedocs.io/en/latest/introduction.html#quick-start">quick start</a>, configure playbooks for <a href="https://enough-community.readthedocs.io/en/latest/services/hostea.html">hostea</a> and <a href="https://enough-community.readthedocs.io/en/latest/services/hosteadashboard.html">the dashboard</a>.</p> +<p>The organization supporting Gna! is a <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a> of individuals and organizations. The <a href="https://forum.hostea.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<h3 id="the-origin">The origin<a class="zola-anchor" href="#the-origin" aria-label="Anchor link for: the-origin" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In February 2022 the project of running a dedicated Gitea hosting service was <a href="https://discourse.gitea.io/t/a-gitea-hosting-service-under-the-umbrella-of-the-gitea-project/4692">proposed to the Gitea project</a> and other organizations and <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">plans were drafted</a>. After a month of discussions it turned out to not be a <a href="https://blog.dachary.org/2022/03/11/the-inconclusive-story-of-four-failed-project-offers/">good match for any of them</a>.</p> +<p>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.</p> +<h3 id="a-technical-stack-with-no-users">A technical stack with no users<a class="zola-anchor" href="#a-technical-stack-with-no-users" aria-label="Anchor link for: a-technical-stack-with-no-users" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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.</p> +<p>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.</p> +<p>To keep the madness contained and enjoyable, it was decided to set a deadline to July 1st and to <a href="https://gitea.gna.org/Hostea/july-mvp/issues">define precise and realistic technical goals</a>. 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.</p> +<h3 id="a-horizontal-collective-with-a-revenue-sharing-model">A horizontal collective with a revenue sharing model<a class="zola-anchor" href="#a-horizontal-collective-with-a-revenue-sharing-model" aria-label="Anchor link for: a-horizontal-collective-with-a-revenue-sharing-model" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a>. It feels like a contradiction for a project committed to decentralization to be governed by a centralized organization.</p> +<p>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 <a href="https://forum.gna.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<p>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.</p> +<h3 id="dedicated-to-forge-federation">Dedicated to forge federation<a class="zola-anchor" href="#dedicated-to-forge-federation" aria-label="Anchor link for: dedicated-to-forge-federation" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/">forge federation</a>, 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.</p> + + + + 1.17 breaking changes episode 1: preserving a custom gitconfig + 2022-06-22T00:00:00+00:00 + 2022-06-22T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-1/ + <p>Before version 1.17, when Gitea needed to change the <a href="https://git-scm.com/docs/git-config">git configuration</a>, it modified the <code>$HOME/.gitconfig</code> file. For instance it would <a href="https://github.com/go-gitea/gitea/blob/release/v1.16/modules/git/git.go#L174-L177">set core.quotePath to false</a>:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[core] +</span><span> </span><span style="color:#bf616a;">quotePath </span><span>= </span><span style="color:#d08770;">false +</span></code></pre> +<p>When installing Gitea <a href="https://docs.gitea.io/en-us/install-with-docker/">from docker</a> or <a href="https://docs.gitea.io/en-us/install-with-docker-rootless/">rootless</a> or even <a href="https://docs.gitea.io/en-us/install-from-binary/">from binary</a> this <code>$HOME/.gitconfig</code> file belongs to a user that is <a href="https://docs.gitea.io/en-us/install-from-binary/#prepare-environment">dedicated to Gitea</a> and not used by anyone else.</p> +<p>However, if an Gitea installation was done differently and <code>$HOME/.gitconfig</code> 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:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[user] +</span><span> </span><span style="color:#bf616a;">name </span><span>= Jane Doe +</span><span> </span><span style="color:#bf616a;">email </span><span>= jane</span><span style="color:#b48ead;">@doe</span><span>.com +</span></code></pre> +<p>It is also possible that the file was modified manually by the Gitea admin for other reasons. In both there is a <strong>potential for breakage when upgrading to Gitea &gt;= 1.17 because the location of the file changed</strong>. It must be moved manually to the new location as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Repository Root Path</strong> (which is <code>/data/git/repositories</code> in the example above).</li> +</ul> +<p>The reason why this breaking change was introduced is to workaround <a href="https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/">a rare problem</a> impacting Gitea installations relying on networked volumes.</p> + + + + [tutorial] A gentle introduction to the gitea doctor + 2022-06-14T00:00:00+00:00 + 2022-06-14T00:00:00+00:00 + + https://gna.org/blog/gentle-introduction-to-the-doctor/ + <p>While helping people with their upgrades <a href="https://discourse.gitea.io/t/migration-from-1-2-to-1-16-8/5309">in the Gitea forum</a> or <a href="https://forum.gna.org/t/gitea-upgrade-from-1-14-1-to-1-16-8/90">at the Gna! clinic</a>, I realized that few Gitea admins know about the <a href="https://docs.gitea.io/en-us/command-line/#doctor"><code>gitea doctor</code></a> command and decided to write this blog post as a gentle introduction.</p> +<h3 id="an-apple-a-day-keeps-the-doctor-away">An apple a day keeps the doctor away<a class="zola-anchor" href="#an-apple-a-day-keeps-the-doctor-away" aria-label="Anchor link for: an-apple-a-day-keeps-the-doctor-away" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Or in our case, Gitea versions <a href="https://github.com/go-gitea/gitea/blob/v1.11.5/cmd/doctor.go">below 1.11.5</a>. Since then, the <code>gitea doctor</code> 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 <code>gitea doctor</code> was backported to <a href="https://github.com/go-gitea/gitea/blob/v1.10.5/cmd/doctor.go">Gitea 1.10.5</a> and <a href="https://github.com/go-gitea/gitea/blob/v1.10.6/cmd/doctor.go">Gitea 1.10.6</a> and may be of help if you run this particular version and are facing the problem that motivated the backport.</p> +<p>With each version <code>gitea doctor</code> improves and gains new capabilities. For instance, in Gitea 1.17 it becomes aware of <a href="https://github.com/go-gitea/gitea/pull/19731">orphaned pull requests</a> and is able to fix them. If such a problem exists in Gitea 1.16, it does not know about it.</p> +<h3 id="calling-the-doctor">Calling the doctor<a class="zola-anchor" href="#calling-the-doctor" aria-label="Anchor link for: calling-the-doctor" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In the following, examples are based on a Gitea 1.16.8 instance you can run as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker run</span><span style="color:#bf616a;"> --name</span><span> gitea</span><span style="color:#bf616a;"> -p</span><span> 3000:3000</span><span style="color:#bf616a;"> -e</span><span> GITEA__security__INSTALL_LOCK=true</span><span style="color:#bf616a;"> -d</span><span> gitea/gitea:1.16.8-rootless +</span><span style="color:#bf616a;">$</span><span> docker exec gitea gitea admin user create</span><span style="color:#bf616a;"> --admin --username</span><span> root</span><span style="color:#bf616a;"> --password</span><span> admin1234</span><span style="color:#bf616a;"> --email</span><span> root@example.com +</span><span style="color:#bf616a;">$</span><span> docker exec gitea mkdir /var/lib/gitea/data/log +</span></code></pre> +<p>And then you can go to the <a href="https://127.0.0.1:3000/">web interface</a> to create a <code>test</code> repository, with an initial <code>README.md</code> file. When this is done the doctor can be called as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --all +</span><span style="color:#bf616a;">[1]</span><span> Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Configuration File Path: &quot;</span><span style="color:#a3be8c;">/etc/gitea/app.ini</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Repository Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/git/repositories</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Data Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Custom File Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/custom</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Work directory: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Log Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/data/log</span><span>&quot; +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[2]</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[3]</span><span> Check Database Version +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[4]</span><span> Check consistency of database +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[5]</span><span> Check if user with wrong type exist +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[6]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[7]</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> ScriptType bash is on the current PATH at /bin/bash +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[8]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[9]</span><span> Recalculate Stars number for all user +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[10]</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> 0 old archives in repository need to be deleted +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[11]</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[12]</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Found 0 broken repo_units +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[13]</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> 0 PRs with incorrect mergebases of 0 PRs total in 1 repos +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[14]</span><span> Check git-daemon-export-ok files +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span></code></pre> +<h3 id="what-does-the-doctor-know">What does the doctor know?<a class="zola-anchor" href="#what-does-the-doctor-know" aria-label="Anchor link for: what-does-the-doctor-know" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Although the <code>doctor</code> can be compared to <a href="https://en.wikipedia.org/wiki/Fsck">fsck(8)</a>, it does not know everything. It took decades for <code>fsck</code> 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 <code>fsck</code> cannot recover from a data loss.</p> +<p>The first <code>doctor</code> 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:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --list +</span><span style="color:#bf616a;">Default</span><span> Name Title +</span><span style="color:#bf616a;">*</span><span> paths Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">storages</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">*</span><span> check-db-version Check Database Version +</span><span> </span><span style="color:#bf616a;">check-db-consistency</span><span> Check consistency of database +</span><span style="color:#bf616a;">*</span><span> check-user-type Check if user with wrong type exist +</span><span style="color:#bf616a;">*</span><span> authorized-keys Check if OpenSSH authorized_keys file is up-to-date +</span><span> </span><span style="color:#bf616a;">script-type</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">hooks</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">recalculate-stars-number</span><span> Recalculate Stars number for all user +</span><span> </span><span style="color:#bf616a;">check-old-archives</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">enable-push-options</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">fix-broken-repo-units</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">recalculate-merge-bases</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">check-git-daemon-export-ok</span><span> Check git-daemon-export-ok files +</span></code></pre> +<p>And then call the <code>check</code> that looks interesting:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> authorized-keys +</span><span style="color:#bf616a;">[1]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>The challenge is to figure out which <code>check</code> does what and at the moment the best source of information is ... <a href="https://github.com/go-gitea/gitea/tree/v1.16.8">the sources</a> themselves. The <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/cmd/doctor.go">doctor.go</a> command is the entry point and <a href="https://github.com/go-gitea/gitea/tree/v1.16.8/modules/doctor">the doctor directory</a> contains the rest.</p> +<p>Some <code>checks</code> are straightforward to understand, even if you do not know Go, such as <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/modules/doctor/authorizedkeys.go">the authorized-keys check</a>. Others are much more involved and your best chance is to <a href="https://matrix.to/#/#gitea:matrix.org">ask the Gitea chatroom</a> for help.</p> +<h3 id="is-it-going-to-hurt">Is it going to hurt?<a class="zola-anchor" href="#is-it-going-to-hurt" aria-label="Anchor link for: is-it-going-to-hurt" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>By default the doctor (very much like <code>fsck -N</code>) 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 <strong>[I]</strong> (which indicates an information) and <strong>[W]</strong> 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 <strong>[I]</strong>, <a href="https://github.com/go-gitea/gitea/pull/19836">which has been fixed</a> in a more recent version of the doctor.</p> +<p>Now let's do something bad: remove the permissions from a hook in our repository:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea chmod</span><span style="color:#bf616a;"> -x</span><span> /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive +</span></code></pre> +<p>Run the doctor with the <code>check</code> supposed to find that out:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>Ask it to fix this with the <code>--fix</code> flag:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks</span><span style="color:#bf616a;"> --fix +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Regenerated hooks for root/test +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>And run it one last time to check all is well:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>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 <code>doctor.log</code> file in the directory from which it runs. Or it can be displayed on the standard output with <code>--log-file -</code>, which is most convenient when running in docker.</p> +<h3 id="going-further">Going further<a class="zola-anchor" href="#going-further" aria-label="Anchor link for: going-further" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>If that was helpful to you, I would very much appreciate if you <a href="https://mastodon.online/@dachary">send me a message on Mastodon</a>. It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could <a href="https://github.com/go-gitea/gitea/pulls">send a pull request</a> to improve the doctor and help it mature.</p> + + + + [solved] Zombies created by Gitea + 2022-06-04T00:00:00+00:00 + 2022-06-04T00:00:00+00:00 + + https://gna.org/blog/zombies-part-2/ + <p>Gitea can <a href="/blog/zombies">create zombies</a>, for instance if a Git mirror takes too long. When updating a mirror, Gitea relies on the <code>git remote update</code> command which creates a child process, <code>git-remote-https</code>, to fetch data from the remote repository. Gitea has an internal timeout that will kill the child process (e.g. <code>git remote update</code>) 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.</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ time git clone https://4.4.4.4 +</span><span>Clonage dans &#39;4.4.4.4&#39;... +</span><span>fatal: impossible d&#39;accéder à &#39;https://4.4.4.4/&#39;: Failed to connect to 4.4.4.4 port 443: Connexion terminée par expiration du délai d&#39;attente +</span><span> +</span><span>real 2m9,753s +</span><span>user 0m0,001s +</span><span>sys 0m0,009s +</span></code></pre> +<p>As explained in the <a href="/blog/zombies/#killing-a-child-process-and-all-its-children">diagnostic blog post regarding Gitea zombies</a> there fortunately is a very simple way to avoid this by making sure each Gitea child is a <a href="https://en.wikipedia.org/wiki/Process_group">process group leader</a>. That first step was <a href="https://github.com/go-gitea/gitea/pull/19865">introduced in Gitea 1.17</a> and <a href="https://github.com/go-gitea/gitea/pull/19865">backported to Gitea 1.16.9</a>. The actual bug fix can now be implemented.</p> +<h3 id="using-negative-process-id-to-kill-children">Using negative process id to kill children<a class="zola-anchor" href="#using-negative-process-id-to-kill-children" aria-label="Anchor link for: using-negative-process-id-to-kill-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>When Gitea timeout on a child, it relies on <a href="https://github.com/golang/go/blob/f8a53df314e4af8cd350eedb0dae77d4c4fc30d0/src/os/exec/exec.go#L650">os.Process.Kill</a> which translates into a using the kill(2) system call to send a SIGKILL signal to unconditionally terminate it: <code>kill(pid, SIGKILL)</code>. Using a negative pid with <code>kill(-pid, SIGKILL)</code> 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:</p> +<blockquote> +<p>If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.</p> +</blockquote> +<p>Which is implemented as follows in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L130">Friendly Forge Format library</a>:</p> +<blockquote> +<p><code>syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)</code></p> +</blockquote> +<h3 id="not-using-the-default-go-commandcontext">Not using the default Go CommandContext<a class="zola-anchor" href="#not-using-the-default-go-commandcontext" aria-label="Anchor link for: not-using-the-default-go-commandcontext" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Since <a href="https://pkg.go.dev/os/exec#CommandContext">CommandContext</a> 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 <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L75-82">Friendly Forge Format library</a> does it:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> ctxErr := watchCtx(ctx, cmd.Process.Pid) +</span><span> err = cmd.Wait() +</span><span> interruptErr := &lt;-ctxErr +</span><span> // If cmd.Wait returned an error, prefer that. +</span><span> // Otherwise, report any error from the interrupt goroutine. +</span><span> if interruptErr != nil &amp;&amp; err == nil { +</span><span> err = interruptErr +</span><span> } +</span></code></pre> +<h3 id="testing-the-bug-is-fixed-and-stays-fixed">Testing the bug is fixed and stays fixed<a class="zola-anchor" href="#testing-the-bug-is-fixed-and-stays-fixed" aria-label="Anchor link for: testing-the-bug-is-fixed-and-stays-fixed" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Long standing bugs that are difficult to reproduce manually such as this one require robust testing to ensure that:</p> +<ul> +<li>the diagnostic identifying the root cause is correct</li> +<li>the bug fix works</li> +<li>it does not resurface insidiously because of a subtle regression introduce years later</li> +</ul> +<p>It is easy to implement as can be seen in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L44-76">Friendly Forge Format library</a>. In a nutshell:</p> +<ul> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L53">git clone https://4.4.4.4</a> which will hang because of firewall rules</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L60-65">wait for the git-remote-https</a> grandchild process to be spawned</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L67-68">cancel the context and wait for the goroutine to terminate</a></li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L70-75">verify the git-remote-https is killed</a></li> +</ul> +<p>And with that... no more zombies!</p> + + + + [diagnostic] Zombies created by Gitea + 2022-06-02T00:00:00+00:00 + 2022-06-02T00:00:00+00:00 + + https://gna.org/blog/zombies/ + <p>The first <a href="https://github.com/go-gitea/gitea/issues/3242">issue about zombie processes</a> created by Gitea was reported in 2017 and <a href="https://github.com/go-gitea/gitea/issues/13987">resurfaced</a> on a <a href="https://github.com/go-gitea/gitea/issues/19077">regular basis</a>. 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:</p> +<ul> +<li>Gitea updates a mirror by spawning the process <code>git remote update</code></li> +<li><code>git remote update</code> spawns yet another process, <code>git fetch</code></li> +<li><code>git fetch</code> is stuck, for instance because of network problems, and Gitea eventually times out</li> +<li>Gitea kill the process <code>git remote update</code></li> +<li>When killed <code>git remote update</code> does not kill its own child and <code>git fetch</code> becomes an orphaned process which keeps running</li> +<li>When <code>git fetch</code> eventually completes it becomes a zombie because its original parent is no longer around to wait on it</li> +</ul> +<h3 id="pid-1-process-and-waiting-on-orphans">PID 1 process and waiting on orphans<a class="zola-anchor" href="#pid-1-process-and-waiting-on-orphans" aria-label="Anchor link for: pid-1-process-and-waiting-on-orphans" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <code>/bin/init</code> and when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile">default docker image</a> this is <code>s6</code>: they will both wait on orphaned processes and there won't be any zombies.</p> +<h3 id="what-if-gitea-is-the-only-running-process">What if Gitea is the only running process?<a class="zola-anchor" href="#what-if-gitea-is-the-only-running-process" aria-label="Anchor link for: what-if-gitea-is-the-only-running-process" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>But when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile.rootless">rootless docker image</a>, 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:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker run --name gitea -p 8080:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless +</span><span>$ docker exec --user 1000 gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com +</span></code></pre> +<p>The <code>git</code> command can then be replaced with a script that waits forever:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ ( echo -e &#39;#!/bin/bash\nsleep infinity&#39; ) | docker exec -i --user root gitea tee /usr/bin/git +</span><span>$ docker exec --user root gitea chmod +x /usr/bin/git +</span></code></pre> +<p>Trying to create a repository from the web interface will create the conditions for a zombie to show:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 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 +</span><span> 164 165 sleep sleep infinity +</span></code></pre> +<p>When the <code>git</code> process is killed by Gitea, the <code>sleep</code> child will be orphaned:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep sleep infinity +</span></code></pre> +<p>Killing it will turn it into a zombie:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea kill 165 +</span><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep [sleep] +</span></code></pre> +<h3 id="killing-a-child-process-and-all-its-children">Killing a child process and all its children<a class="zola-anchor" href="#killing-a-child-process-and-all-its-children" aria-label="Anchor link for: killing-a-child-process-and-all-its-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://en.wikipedia.org/wiki/Process_group">process group leaders</a>. In a nutshell it means that when the child is killed all its children and grand children are also killed.</p> + + + + [solved] Gitea 1.15 and up: path not found or permission denied + 2022-05-28T00:00:00+00:00 + 2022-05-28T00:00:00+00:00 + + https://gna.org/blog/path-not-found/ + <p>In Gitea 1.15 the <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/custom/conf/app.example.ini">app.example.ini</a> file was changed to <a href="https://github.com/go-gitea/gitea/commit/4a84022d2559ccfc99960c7c654ee8b9b38664f7">comment out most of the values</a>. The assumption was that all values exactly matched the defaults <a href="https://github.com/go-gitea/gitea/blob/main/modules/setting/setting.go">in the source code</a>. However, there are differences, for instance for <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/modules/setting/setting.go#L771">APP_DATA_PATH</a>. Before Gitea 1.15, <code>app.example.ini</code> contained:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>directory from which the Gitea server was running</strong>. In Gitea 1.15 up to 1.16, it was commented out:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. </p> +<p>When a distribution such as voidlinux <a href="https://github.com/void-linux/void-packages/blob/master/srcpkgs/gitea/patches/config.patch">uses app.example.ini</a> as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea <a href="https://github.com/go-gitea/gitea/issues/19367">fails with errors</a> such as <code>unable to open level db at data/data/queues/common: mkdir data: permission denied</code>. The regression did not show as soon as Gitea 1.15 became available in voidlinux because the package <a href="https://github.com/void-linux/void-packages/blob/7fc9190f0e0d557dd5031e68df4e183892d4315b/srcpkgs/gitea/patches/config.patch#L62">explicitly set <code>APP_DATA_PATH</code></a>. But this <a href="https://github.com/void-linux/void-packages/commit/19d986a2cae9ce73d32552ddb62443b5e7fa13e2">changed when Gitea 1.15.6 was packaged</a> and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the <a href="https://github.com/void-linux/void-packages/commit/44b6c96fa12ce9d993c7a2ac9486d892735b7e3a">Gitea 1.16.8</a> package.</p> +<p>The <code>APP_DATA_PATH</code> directory is not the only one, the <code>[log] ROOT_PATH</code> is another example. There is an <a href="https://github.com/go-gitea/gitea/pull/19815">ongoing effort</a> 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 <code>app.ini</code> file will be interpreted differently. In the case of <code>APP_DATA_PATH</code>, both:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>will be interpreted to be relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. Every Gitea installation using <strong>APP_DATA_PATH = data</strong> will need to update the value to be an absolute path such as <strong>/var/lib/gitea/data</strong> so that it keeps pointing to the expected directory.</p> +<p>In order to prepare for the change or ensure the consistency of all path, there fortunately is a very simple <strong>solution: always use absolute paths in the <code>app.ini</code> configuration file</strong>.</p> + + + + [solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else + 2022-05-15T00:00:00+00:00 + 2022-05-15T00:00:00+00:00 + + https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/ + <p>April 12, 2022 version <a href="https://lore.kernel.org/git/xmqqv8veb5i6.fsf@gitster.g/">git v2.35.2</a> was released and addresses a security issue <a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a>. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as <a href="https://security-tracker.debian.org/tracker/CVE-2022-24765">Debian GNU/Linux</a>, <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<p><strong>If Gitea runs as user <code>foo</code>, calls a patched Git version and a parent directory of the git repositories is owned by a user other than <code>foo</code>, it will fail</strong> with a message such as:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>Failed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository (&#39;/data/git/repositories/git/data.git&#39; is owned by someone else) +</span></code></pre> +<p>This started to show in the past few weeks to <a href="https://github.com/go-gitea/gitea/issues/19455">users running the Gitea binary on Windows</a> who also independently installed git v2.36. And then to people running <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106331149">Gitea from snap</a>, on <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106312061">a Synology NAS</a> and then people running from <a href="https://github.com/go-gitea/gitea/blob/main/Dockerfile#L2">Gitea docker images</a> which is based on <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<h3 id="workarounds">Workarounds<a class="zola-anchor" href="#workarounds" aria-label="Anchor link for: workarounds" + ><span class="anchor-icon">#</span></a +> +</h3> +<ul> +<li>If using <a href="https://hub.docker.com/r/gitea/gitea">Gitea docker images</a>: +<ul> +<li>upgrade to <a href="https://github.com/go-gitea/gitea/pull/19876">Gitea &gt;=1.16.9</a> or 1.17, both have git &gt;=2.36</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +<li>If the Gitea binary was installed independently of git, upgrade git to a version that is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a> and disable the security check entirely with: +<ul> +<li>impersonate the <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">user dedicated to Gitea</a> (usually git)</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +</ul> +<h3 id="bug-fix">Bug fix<a class="zola-anchor" href="#bug-fix" aria-label="Anchor link for: bug-fix" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>The <a href="https://github.com/go-gitea/gitea/pull/19870">bug fix</a> is for Gitea to ensure <code>git config --global --replace-all safe.directory '*'</code> is set on its <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">dedicated user</a> when it initializes. It is effective on the condition that the git CLI version is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a>.</p> +<h3 id="bug-fix-rationale">Bug fix rationale<a class="zola-anchor" href="#bug-fix-rationale" aria-label="Anchor link for: bug-fix-rationale" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>It is safe to <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs">disable the security check in Gitea</a>. It is not vulnerable to <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong> because it calls the git CLI <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/command.go#L160">after changing its working directory</a> to be the git repository targeted by the command (for instance <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/diff.go#L38-L45">diff</a>) or a temporary directory. Therefore <strong>it will not explore the parent directories looking for a git configuration file</strong>.</p> +<p>The security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and <strong>not because a parent directory is owned by an unexpected user</strong>. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong>.</p> +<p>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.</p> +<p>Gitea runs under a dedicated user, either when installed <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">from binary</a> or from <a href="https://docs.gitea.io/en-us/install-with-docker/">docker</a> and <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/git.go#L196-L207">modifies the global git configuration</a> depending on the git version at initialization time. Fixing the problem can therefore be done by <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#bcd72ff867cbd1ddd5b6518c3a05b5f1a6021286_209_209">disabling the security check in the global git config file at initialization time</a>. It also requires a minimum version of git 2.36 to be installed, which is the case for Gitea docker images with <a href="https://github.com/go-gitea/gitea/pull/19876">versions &gt;= 1.16.9</a>.</p> + + + + [solved] blank or error 500 page after login + 2022-05-08T00:00:00+00:00 + 2022-05-08T00:00:00+00:00 + + https://gna.org/blog/blank-or-error-500-page-after-login/ + <p>The <a href="https://docs.gitea.io/en-us/upgrade-from-gitea/#upgrade-from-binary">instructions to upgrade a Gitea instance</a> only require three to four steps. They work fine most of the time but the documentation is lacking a &quot;Troubleshooting&quot; 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.</p> +<p>An <a href="https://forum.gna.org/t/things-to-know-about-gitea-upgrades/39">inventory of the known upgrade issues</a> was started to figure out how to structure such a section in the documentation. The <a href="https://blog.gitea.io/">release notes</a> were analyzed all the way back to <a href="https://github.com/go-gitea/gitea/releases/tag/v1.9.6">Gitea 1.9.6</a> and the work is still in progress. Here is a sample of the tips that will be included:</p> +<ul> +<li>Upgrade directly to the latest Gitea version, there is no need to upgrade to intermediate versions.</li> +<li>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.</li> +<li>etc.</li> +</ul> +<p>However, even with the best documentation, someone will eventually <strong>run into an new problem</strong> and fixing it without compromising the integrity of the data will be challenging. This is best demonstrated by a real world example that was concluded a few days ago.</p> +<h1 id="getting-help-from-the-community">Getting help from the community<a class="zola-anchor" href="#getting-help-from-the-community" aria-label="Anchor link for: getting-help-from-the-community" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>After <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">upgrading a Gitea intsance from 1.9.6 to 1.16.5</a> the tests conducted manually did not uncover any problem. However, after going to production, some users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser. The person in charge of the upgrade never had to diagnose Gitea problem and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">reached out in the Gitea forum</a>.</p> +<blockquote> +<p><strong>Tip: explain the problem in a public forum as early as possible to get help from the community</strong></p> +</blockquote> +<p>In their post in the forum they explained how they attempted to diagnose the problem and how why they thought that only users created a few years ago were impacted. It was a detailed analysis that was concluded with a partial copy of the logs. It was unfortunately missing <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">key information</a> that was provided only three days later. In the meantime, as they could not figure out the source of the problem, they were on the <strong>verge of <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/11">accepting the loss of all the Gitea database</a> and start over from the repositories</strong>. However, once all the details were available, <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">a workaround</a> was suggested in the forum.</p> +<blockquote> +<p><strong>Tip: focus more on providing detailed facts than exposing the attempted diagnostic</strong></p> +</blockquote> +<p>There was hope to fix Gitea and in the following days they applied the workaround. They also tried to improve it but without success and eventually accepted a <strong>partial data loss</strong> as inevitable and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">reported their success back to the forum</a>.</p> +<blockquote> +<p><strong>Tip: when getting support from the community, providing feedback is the best token of appreciation</strong></p> +</blockquote> +<h1 id="getting-professional-help">Getting professional help<a class="zola-anchor" href="#getting-professional-help" aria-label="Anchor link for: getting-professional-help" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The <a href="https://gna.org/gitea-clinic/">Gna! Clinic</a> is a collective of individual and companies that provides professional services to Gitea admins. They are active members of the Gitea community who <a href="https://discourse.gitea.io/u/dachary/activity">help out</a> as volunteers. They can also be hired to resolve the more complicated cases.</p> +<p>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 <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">proposed their assistance</a> but although <a href="https://discourse.gitea.io/t/user-research-about-gitea-upgrade-experiences-call-for-volunteers/5063/2">well received</a>, it was not accepted.</p> +<p>When the Gitea admin explained how they chose to resolve the problem <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">on the forum</a>, it confirmed the workaround was viable and the root problem was identified. That was enough to figure out a fix for the underlying bug with <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a rather simple patch</a> that was merged <a href="https://github.com/go-gitea/gitea/pull/19629">and backported</a> in the following days. But it happened too late to avoid the data loss.</p> +<p>To summarize with a timeline, here is what happened:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login and a the Gitea admin tries to diagnose the problem</li> +<li>J+2: A message is sent <strong>to ask for help in the community</strong></li> +<li>J+2 to J+6: Three people in the community suggest ideas but <strong>the Gitea admin cannot figure out the root cause and is on the verge of accepting the loss of all Gitea data</strong> and restart from the git repositories</li> +<li>J+6: A <strong>workaround is suggested by the community</strong></li> +<li>J+7 to J+17: The Gitea admin applies the <strong>workaround and only looses part of the Gitea data</strong></li> +</ul> +<p>And in retrospect, here is what could have happened instead:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login</li> +<li>J+1: The Gitea admin <strong><a href="https://gna.org/gitea-clinic/">reaches out to someone at the Gna! Clinic</a></strong></li> +<li>J+2: The <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">logs of the Gitea instance</a> are analyzed, <strong>the root cause diagnosed</strong> and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a patch</a> is created to fix it.</li> +<li>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 <a href="https://github.com/go-gitea/gitea/pull/19629">the backport</a>. The Gitea admin runs the patched Gitea binary in the meantime. <strong>There is no data loss</strong>.</li> +</ul> +<p>It does not mean all upgrade problems can be resolved so easily. But it shows, with an example, that in some cases it makes sense to get professional help.</p> + + + + Introducing Gna! + 2022-04-22T00:00:00+00:00 + 2022-04-22T00:00:00+00:00 + + https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/ + <p>Introducing <a href="https://gna.org">Hostea</a>, a project <a href="https://dachary.org">Loïc +Dachary</a> and <a href="https://batsense.net">Aravinth +Manivannan</a> are working on to create a full Free +software development suite based on +<a href="https://gitea.io">Gitea</a> for the forge, <a href="https://woodpecker-ci.org">Woodpecker +CI</a> for CI/CD, +<a href="https://github.com/realaravinth/pages">Pages</a> for static sites and +<a href="https://gitpad.org">GitPad</a> for gists.</p> +<p>This talk introduces the projects goals and philosophy behind the +project.</p> +<p>Please see +<a href="https://forum.forgefriends.org/t/forgefriends-monthly-update-april-22st-2022-5pm-6pm-utc-2/673">here</a> +to learn more about the event.</p> +<h2 id="details">Details<a class="zola-anchor" href="#details" aria-label="Anchor link for: details" + ><span class="anchor-icon">#</span></a +> +</h2> +<ul> +<li><strong>organised by:</strong> <a href="https://forgefriends.org">forgefriends.org</a></li> +<li><strong>date:</strong> 2022<sup>th</sup> April, 2022</li> +<li><strong>venue:</strong> Online</li> +</ul> +<h2 id="resources">Resources<a class="zola-anchor" href="#resources" aria-label="Anchor link for: resources" + ><span class="anchor-icon">#</span></a +> +</h2> +<ul> +<li><a href="./slides/2022-04-22-forgefriends-introducing-hostea.odp">slides(ODP)</a></li> +<li><a href="./slides/2022-04-22-forgefriends-introducing-hostea.pdf">slides(PDF)</a></li> +</ul> + + + + Project plans for a hosted Gitea online service + 2022-04-18T00:00:00+00:00 + 2022-04-18T00:00:00+00:00 + + https://gna.org/blog/project-plans-for-hosted-gitea-online-service/ + <p><em>This post was originally published on <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">Loïc Dachary's +blog</a>.</em></p> +<hr /> +<p>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, in the same +way they can go to https://discourse.org for a forum, or +https://nextcloud.com for storage. Instead of waiting for that to +happen, <a href="https://batsense.net/about/">Aravinth</a> and +<a href="https://dachary.org/">myself</a> decided to do something about it, in a +way that is in line with our shared values: transparency and Free +Software.</p> +<p>After doing some research we found counter examples that showed the +pitfalls to avoid. GitLab because its business model heavily relies on +selling proprietary licenses. CiviCRM because setting it up is complex +and requires training: users can't figure it out on their own. Gitea +images provided by Digital Ocean because they do not include security +upgrades. MySQL configured and run by AWS because of the vendor lock-in +that makes it impossible to self-host.</p> +<p>We concluded that an online service such as Gitea can be hosted in a +sustainable way as long as:</p> +<ul> +<li>It is well maintained and upgrades itself</li> +<li>It can be self-hosted</li> +<li>The service can automatically be restored from backups when the +underlying resources fail</li> +</ul> +<p>GitHub and GitLab make it look like there is a market around software +forges. It is however impossible to figure out if this market exists +only because it is based on proprietary software. How many of these +customers would pay for a Free Software hosted Gitea instance?</p> +<p>Even if these customers do exist, a new service provider would have to +figure out how to convince them to subscribe. The technical development +of the service can be done within weeks but building a sustainable +business takes much longer. Again, there were examples of what can go +wrong, for instance ElasticSearch. After years of work developing a +successful online service and a customer base, AWS entered the +competition and started to take it away from them.</p> +<p>The sustainability of the Free Software ecosystem is a new and very +difficult problem to solve. It is discussed more than it ever was in the +wake of security breaches originating from widely used and yet abandoned +library or disillusioned Free Software authors self-sabotaging their +next release, and everyone has diverging opinions. It falls on each Free +Software author to spend time to think about their own projects because +there are no handbook or good examples to follow. That is what Aravinth +and myself did to find a semblance of clarity and decide how to go about +this hosted Gitea service idea.</p> +<h1 id="sustaining-free-software-online-services">Sustaining Free Software online services<a class="zola-anchor" href="#sustaining-free-software-online-services" aria-label="Anchor link for: sustaining-free-software-online-services" + ><span class="anchor-icon">#</span></a +> +</h1> +<h2 id="more-mature-online-services-mean-less-opportunities-to-sell-services">More mature online services mean less opportunities to sell services<a class="zola-anchor" href="#more-mature-online-services-mean-less-opportunities-to-sell-services" aria-label="Anchor link for: more-mature-online-services-mean-less-opportunities-to-sell-services" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>Ideally the software running an online service is rock solid and bugs +are so rare that it can run unattended. This is true of +https://wordpress.org and it is not uncommon for an instance to run for +years while upgrading themselves to get security patches. The cost of +maintaining such a service is negligible and hosting companies can offer +it for free to their customers. They make their profit by renting the +machines on which the service runs.</p> +<p>When the software is not as mature, it is more expensive to run. Bugs +need fixing, upgrades require manual intervention, users must be trained +to overcome the complexity of the user experience, etc. Well known +examples are Discourse or CiviCRM for which companies sell services to +overcome these issues.</p> +<p>But when an organization is both the author of the software and the +provider of paid services to compensate for its lack of maturity, it +creates a conflict of interest. Should they focus their effort on making +the software more mature, they would harm a business model that is based +on this very lack of maturity. For instance, if the author of a software +also sells training courses, they are not motivated to solve user +experience issues. If they did, it would lower the need for training +courses and reduce their income.</p> +<h2 id="free-software-online-services-in-the-wake-of-the-sustainability">Free Software online services in the wake of the sustainability<a class="zola-anchor" href="#free-software-online-services-in-the-wake-of-the-sustainability" aria-label="Anchor link for: free-software-online-services-in-the-wake-of-the-sustainability" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>crisis</p> +<p>Nowadays all Free Software authors struggle to get enough resources to +produce a steady stream of releases, even when the project is very +popular. This sustainability problem is getting more and more attention +as the number of Free Software projects in use world wide keeps growing. +Even the simplest online service relies on thousands of Free Software +projects, each of which needs work to keep going. Accidents caused by +poorly maintained Free Software projects become more frequent.</p> +<p>This Free Software sustainability crisis is barely emerging and very +much resembles ecological problems such as climate change. In both cases +it is very difficult to figure out how to properly care for the +resources that are consumed. After decades of advocacy, it is generally +accepted that fossil energy won't last forever but there still is a long +way to go. It will also take a long time for the Free Software community +to answer this simple question: how to sustain an ever growing library +of Free Software?</p> +<p>Luckily, it is relatively simpler to solve that problem for an online +service because it has users. They can be reminded that their assistance +is needed to keep the project afloat, for instance by a donation. A +proposition that would be much more difficult to make for the author of +a cryptographic library. Convincing users to pay for an online service +has the best chance of success when the author of the software is also +the service provider. This is the business model of Discourse and +Weblate, but it is relatively fragile because nothing stands in the way +of the competition.</p> +<p>A few years ago ElasticSearch successfully developed an online service +offering. But when AWS entered the competition and was better at +marketing it, ElasticSearch quickly realized they would likely go out of +business. They tried to fight back by <a href="https://www.elastic.co/blog/licensing-change">changing their +license</a>, which was the +wrong answer to a real problem. Discourse or Weblate are also likely to +face competition from hosting companies in the future and they may not +survive it.</p> +<p>In the end, the durable source of income for a Free Software online +service is to rent the resources (CPU/RAM/network/disk) it needs to run. +In other words only hosting companies can make a profit when running +such an online service. And for that reason they also need to share part +of the profits to ensure the sustainability of the Free Software service +their customers need.</p> +<h1 id="online-services-vendor-lock-in-is-cured-by-free-software">Online services vendor lock-in is cured by Free Software<a class="zola-anchor" href="#online-services-vendor-lock-in-is-cured-by-free-software" aria-label="Anchor link for: online-services-vendor-lock-in-is-cured-by-free-software" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>When hosting companies offer online services they also provide upgrades +and transparent recovery when the hardware fails. But none of them allow +the service to be self-hosted. When their price policy change, or when +the term of services ban users from a given country, migrating the +service elsewhere it costly and difficult. For instance when AWS runs +MySQL for their customers, they allow to download the data but not the +software that runs the proprietary AWS interface used to configure and +control the server. Another example is GitHub where the content of the +git repository can be downloaded but the code that runs GitHub itself is +not Free Software.</p> +<p>If a customer cannot run the same software as their service provider, +they are locked-in, even if they can download their data. It is a common +misconception to think that there is no vendor lock-in as long as it is +possible to download the data in an standard format. Migrating the data +from one software to another is, more often than not, time consuming and +costly to a point that it is effectively a blocker. A GitHub salesperson +would argue that it is possible for people to run GitHub Enterprise on +their own hardware. But the vendor lock-in is still present via the +proprietary license contract. The user experience, maintenance and +upgrades are still exclusively controlled by GitHub.</p> +<p>To guarantee their independence, the customers of an online service need +to be able to:</p> +<ul> +<li>Download their data</li> +<li>Run the exact same Free Software as their service provider</li> +<li>Run the exact same Free Software infrastructure as code as their +service provider</li> +</ul> +<p>The requirement regarding Free Software infrastructure as code refers +to, for instance, the AWS control panel and all that is behind it when +creating a new MySQL service. It includes whatever a competitor would +need to run the same online service. An example would be +https://enough.community, an infrastructure as code dedicated to +creating the services needed by whistleblowers and human rights +defenders. It consumes resources rented by hosting providers, assembles +disks and machines, setup monitoring and intrusion detection, installs +various online services and upgrades them.</p> +<p>The availability of the software that creates the infrastructure is not +only useful to the competitors of a service provider. It also benefits a +non-profit that wants to provide (for instance) Wordpress instances to +its members. Without it they would need to create something from scratch +using building blocks such as CiviCRM. Even though such building blocks +exist, this is a significant undertaking and effectively a blocker.</p> +<h1 id="federated-online-services-and-durability">Federated online services and durability<a class="zola-anchor" href="#federated-online-services-and-durability" aria-label="Anchor link for: federated-online-services-and-durability" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>All self-hosted services are in danger of losing the data they contain. +When a Wordpress service is hosted in a home and the machine dies, it +must be restored from backups... when there are backups. Hosting +companies ensure the durability of the data with their own backup +system. It creates a dilemma for people who are looking into self +hosting: independence is desirable, but is it worth taking the risk of +data loss?</p> +<p>Federated online services do not suffer from this problem, because they +can mirror each other. A Gitea instance that is federated with another +will mirror copies of software projects found on its peers. Should one +instance be destroyed, mirrored projects can be resurrected from the +federated instance. Not only is it a practical way to ensure the (rare) +failure of an entire datacenter, it also helps with the (more frequent) +destruction of self-hosted machines. Contrary to backups that require +special attention, the replication involved in federated online service +is built in and works continuously. There is no need for an extra backup +service that is very rarely used and therefore likely to fail when +needed.</p> +<p>Federated services are not yet mainstream and Gitea is one of the rare +services that started to implement the concept. In the interim, +customers of an online hosting service will need to worry about backups +to ensure the durability of their data. But the ultimate solution for +them won't be the emergence of an ideal backup infrastructure, it will +be replication (via federated services) that will continuously ensure +the durability of their data.</p> +<h1 id="paths-forward">Paths forward<a class="zola-anchor" href="#paths-forward" aria-label="Anchor link for: paths-forward" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The Gitea project itself, following the footsteps of Discourse or +Weblate, could provide a hosting service. Part of its current user base +may become customers and there does not seem to be any blocker to make +that happen. As with most successful Free Software project, people +working on Gitea daily are already very busy and cannot engage in such a +long term project. But Aravinth and myself can, if they will have us.</p> +<p>Another path forward would be to wrap Gitea into a bundle that existing +hosting companies could easily use to provide such a service to their +customers. The biggest hosting companies are unlikely to be interested: +if Digital Ocean was to provide upgrades on top of their existing Gitea +image, they are more likely to rely on their internal staff to implement +that from scratch, as proprietary software integrated into their +existing infrastructure. But smaller hosting companies such as +https://Octopuce.fr or https://Easter-Eggs.com, who already deploy Gitea +instances for their customers, would use it if, for instance, it helped +with the upgrades. They would then kindly be reminded to give back a +share of their profits in order to sustain the development of the +service they deploy.</p> +<p>Finally it would also be possible to follow the example of GitLab in the +early days (before it turned to proprietary software) or Codeberg and +offer a free shared forge hosting service to build a user base. After a +few years, a percentage of the user base would convert to being paid +customers or donors to sustain the activity and part of the income would +be used to sustain the development of the service.</p> + + + diff --git a/blog/blank-or-error-500-page-after-login/index.html b/blog/blank-or-error-500-page-after-login/index.html new file mode 100644 index 0000000..e0673a2 --- /dev/null +++ b/blog/blank-or-error-500-page-after-login/index.html @@ -0,0 +1,357 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [solved] blank or error 500 page after login | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

[solved] blank or error 500 page after login

+ + + +
+

The instructions to upgrade a Gitea instance 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 was started to figure out how to structure such a section in the documentation. The release notes were analyzed all the way back to Gitea 1.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.
  • +
  • etc.
  • +
+

However, even with the best documentation, someone will eventually run into an new problem and fixing it without compromising the integrity of the data will be challenging. This is best demonstrated by a real world example that was concluded a few days ago.

+

Getting help from the community# +

+

After upgrading a Gitea intsance from 1.9.6 to 1.16.5 the tests conducted manually did not uncover any problem. However, after going to production, some users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser. The person in charge of the upgrade never had to diagnose Gitea problem and reached out in the Gitea forum.

+
+

Tip: explain the problem in a public forum as early as possible to get help from the community

+
+

In their post in the forum they explained how they attempted to diagnose the problem and how why they thought that only users created a few years ago were impacted. It was a detailed analysis that was concluded with a partial copy of the logs. It was unfortunately missing key information that was provided only three days later. In the meantime, as they could not figure out the source of the problem, they were on the verge of accepting the loss of all the Gitea database and start over from the repositories. However, once all the details were available, a workaround was suggested in the forum.

+
+

Tip: focus more on providing detailed facts than exposing the attempted diagnostic

+
+

There was hope to fix Gitea and in the following days they applied the workaround. They also tried to improve it but without success and eventually accepted a partial data loss as inevitable and reported their success back to the forum.

+
+

Tip: when getting support from the community, providing feedback is the best token of appreciation

+
+

Getting professional help# +

+

The Gna! 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 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 but although well received, it was not accepted.

+

When the Gitea admin explained how they chose to resolve the problem on the forum, it confirmed the workaround was viable and the root problem was identified. That was enough to figure out a fix for the underlying bug with a rather simple patch that was merged and backported in the following days. But it happened too late to avoid the data loss.

+

To summarize with a timeline, here is what happened:

+
    +
  • J+1: The problem is discovered by users who see a blank page after login and a the Gitea admin tries to diagnose the problem
  • +
  • J+2: A message is sent to ask for help in the community
  • +
  • J+2 to J+6: Three people in the community suggest ideas but the Gitea admin cannot figure out the root cause and is on the verge of accepting the loss of all Gitea data and restart from the git repositories
  • +
  • J+6: A workaround is suggested by the community
  • +
  • J+7 to J+17: The Gitea admin applies the workaround and only looses part of the Gitea data
  • +
+

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 Gna! Clinic
  • +
  • J+2: The logs of the Gitea instance are analyzed, the root cause diagnosed and a patch 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. The Gitea admin runs the patched Gitea binary in the meantime. There is no data loss.
  • +
+

It does not mean all upgrade problems can be resolved so easily. But it shows, with an example, that in some cases it makes sense to get professional help.

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/experimental/index.html b/blog/experimental/index.html new file mode 100644 index 0000000..4e45d12 --- /dev/null +++ b/blog/experimental/index.html @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Get a Gitea instance with CI at Gna! | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

Get a Gitea instance with CI at Gna!

+ + + +
+

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 within minutes and pay for it on a monthly basis with a credit card. It includes a dedicated CI based on Woodpecker. 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.

+ +

The service is 100% infrastructure as code, published as Ansible playbooks within Enough. It can be self-hosted on bare metal (with libvirt) or in the cloud (with OpenStack): follow the quick start, configure playbooks for hostea and the dashboard.

+

The organization supporting Gna! is a horizontal collective of individuals and organizations. The revenue sharing model 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 and other organizations and plans were drafted. After a month of discussions it turned out to not be a good match for any of them.

+

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. 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. 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 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, 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.

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/gentle-introduction-to-the-doctor/index.html b/blog/gentle-introduction-to-the-doctor/index.html new file mode 100644 index 0000000..9b2672a --- /dev/null +++ b/blog/gentle-introduction-to-the-doctor/index.html @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [tutorial] A gentle introduction to the gitea doctor | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

[tutorial] A gentle introduction to the gitea doctor

+ + + +
+

While helping people with their upgrades in the Gitea forum or at the Gna! clinic, I realized that few Gitea admins know about the gitea 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. 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 and Gitea 1.10.6 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 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:

+
$ 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 to create a test repository, with an initial README.md file. When this is done the doctor can be called as follows:

+
$ 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), 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:

+
$ 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:

+
$ 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 themselves. The doctor.go command is the entry point and the doctor directory contains the rest.

+

Some checks are straightforward to understand, even if you do not know Go, such as the authorized-keys check. Others are much more involved and your best chance is to ask the Gitea chatroom 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 in a more recent version of the doctor.

+

Now let's do something bad: remove the permissions from a hook in our repository:

+
$ 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:

+
$ 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:

+
$ 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:

+
$ 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. It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could send a pull request to improve the doctor and help it mature.

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..9d2f69b --- /dev/null +++ b/blog/index.html @@ -0,0 +1,675 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Posts | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+

Posts

+ +

Gna! is a Clinic 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 to the blog or the Mastodon account to keep up to date.

+ + +
+ + + + +
+ + +
+ + diff --git a/blog/main.css b/blog/main.css new file mode 100644 index 0000000..fa6f94c --- /dev/null +++ b/blog/main.css @@ -0,0 +1 @@ +.blog__content img{max-width:100%;display:block}.blog__content video{max-width:100%;display:block}.blog__content li{margin-left:40px}.blog__content a:hover{color:#0056b3;text-decoration:underline}.blog__content code{word-wrap:break-word;overflow-wrap:break-word}.blog__content table{border-collapse:collapse;caption-side:bottom;border-color:#e9ecef;text-align:center;width:100%}.blog__content table>thead{vertical-align:bottom;border-bottom:1px solid #cdc8ca;text-align:center}.blog__content table th{text-align:center}.blog__content table td{margin:auto;padding:10px;border-bottom:1px solid #edddd1}.blog__content p,.blog__content h2,.blog__content h3{margin:10px 0}.blog__content pre{padding:10px 10px 10px 20px;border-radius:8px;font-size:0.95rem;overflow:auto}.blog__content pre{font-family:monospace, monospace;font-display:auto;font-size:1em}.blog__content p{margin:30px 0}.blog__container{margin:auto;max-width:50%}.blog__list{list-style:none}.blog__post-link,.blog__post-link:visited{text-decoration:none;color:inherit}.blog__title{margin:35px 0}.blog__post-link{display:block}.blog__post-item{border-bottom:1px dashed #333;margin:10px;padding:10px}.blog__post-item:hover{background-color:lightgray}.blog__post-item:last-child{border-bottom:none}.blog__post-description{font-size:0.9rem;margin:5px 0}.blog__post-tag{font-size:0.7rem;font-family:monospace, monospace}.blog__post-tag:hover{color:#0056b3;text-decoration:underline}.blog__post-meta{font-size:0.7rem}.blog__post-title{font-size:1.4rem;font-weight:550}.blog__post-tag-container{margin:0} diff --git a/blog/mobile.css b/blog/mobile.css new file mode 100644 index 0000000..1990f09 --- /dev/null +++ b/blog/mobile.css @@ -0,0 +1 @@ +.blog__container{max-width:95%}.blog__content table{overflow-x:scroll}.blog__content table td{padding:5px}.blog__content pre{white-space:pre-wrap;word-wrap:break-word}.blog__content li{margin-left:25px}.blog__content p,.blog__content h1,.blog__content h2,.blog__content h3{margin:20px 0px} diff --git a/blog/path-not-found/index.html b/blog/path-not-found/index.html new file mode 100644 index 0000000..e2b45e3 --- /dev/null +++ b/blog/path-not-found/index.html @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [solved] Gitea 1.15 and up: path not found or permission denied | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

[solved] Gitea 1.15 and up: path not found or permission denied

+ + + +
+

In Gitea 1.15 the app.example.ini file was changed to comment out most of the values. The assumption was that all values exactly matched the defaults in the source code. However, there are differences, for instance for APP_DATA_PATH. 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 as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea fails with errors 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. But this changed when Gitea 1.15.6 was packaged and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the Gitea 1.16.8 package.

+

The APP_DATA_PATH directory is not the only one, the [log] ROOT_PATH is another example. There is an ongoing effort 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.

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/project-plans-for-hosted-gitea-online-service/index.html b/blog/project-plans-for-hosted-gitea-online-service/index.html new file mode 100644 index 0000000..3c6ad0b --- /dev/null +++ b/blog/project-plans-for-hosted-gitea-online-service/index.html @@ -0,0 +1,529 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Project plans for a hosted Gitea online service | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

Project plans for a hosted Gitea online service

+ + + +
+

This post was originally published on Loïc Dachary's +blog.

+
+

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, in the same +way they can go to https://discourse.org for a forum, or +https://nextcloud.com for storage. Instead of waiting for that to +happen, Aravinth and +myself decided to do something about it, in a +way that is in line with our shared values: transparency and Free +Software.

+

After doing some research we found counter examples that showed the +pitfalls to avoid. GitLab because its business model heavily relies on +selling proprietary licenses. CiviCRM because setting it up is complex +and requires training: users can't figure it out on their own. Gitea +images provided by Digital Ocean because they do not include security +upgrades. MySQL configured and run by AWS because of the vendor lock-in +that makes it impossible to self-host.

+

We concluded that an online service such as Gitea can be hosted in a +sustainable way as long as:

+
    +
  • It is well maintained and upgrades itself
  • +
  • It can be self-hosted
  • +
  • The service can automatically be restored from backups when the +underlying resources fail
  • +
+

GitHub and GitLab make it look like there is a market around software +forges. It is however impossible to figure out if this market exists +only because it is based on proprietary software. How many of these +customers would pay for a Free Software hosted Gitea instance?

+

Even if these customers do exist, a new service provider would have to +figure out how to convince them to subscribe. The technical development +of the service can be done within weeks but building a sustainable +business takes much longer. Again, there were examples of what can go +wrong, for instance ElasticSearch. After years of work developing a +successful online service and a customer base, AWS entered the +competition and started to take it away from them.

+

The sustainability of the Free Software ecosystem is a new and very +difficult problem to solve. It is discussed more than it ever was in the +wake of security breaches originating from widely used and yet abandoned +library or disillusioned Free Software authors self-sabotaging their +next release, and everyone has diverging opinions. It falls on each Free +Software author to spend time to think about their own projects because +there are no handbook or good examples to follow. That is what Aravinth +and myself did to find a semblance of clarity and decide how to go about +this hosted Gitea service idea.

+

Sustaining Free Software online services# +

+

More mature online services mean less opportunities to sell services# +

+

Ideally the software running an online service is rock solid and bugs +are so rare that it can run unattended. This is true of +https://wordpress.org and it is not uncommon for an instance to run for +years while upgrading themselves to get security patches. The cost of +maintaining such a service is negligible and hosting companies can offer +it for free to their customers. They make their profit by renting the +machines on which the service runs.

+

When the software is not as mature, it is more expensive to run. Bugs +need fixing, upgrades require manual intervention, users must be trained +to overcome the complexity of the user experience, etc. Well known +examples are Discourse or CiviCRM for which companies sell services to +overcome these issues.

+

But when an organization is both the author of the software and the +provider of paid services to compensate for its lack of maturity, it +creates a conflict of interest. Should they focus their effort on making +the software more mature, they would harm a business model that is based +on this very lack of maturity. For instance, if the author of a software +also sells training courses, they are not motivated to solve user +experience issues. If they did, it would lower the need for training +courses and reduce their income.

+

Free Software online services in the wake of the sustainability# +

+

crisis

+

Nowadays all Free Software authors struggle to get enough resources to +produce a steady stream of releases, even when the project is very +popular. This sustainability problem is getting more and more attention +as the number of Free Software projects in use world wide keeps growing. +Even the simplest online service relies on thousands of Free Software +projects, each of which needs work to keep going. Accidents caused by +poorly maintained Free Software projects become more frequent.

+

This Free Software sustainability crisis is barely emerging and very +much resembles ecological problems such as climate change. In both cases +it is very difficult to figure out how to properly care for the +resources that are consumed. After decades of advocacy, it is generally +accepted that fossil energy won't last forever but there still is a long +way to go. It will also take a long time for the Free Software community +to answer this simple question: how to sustain an ever growing library +of Free Software?

+

Luckily, it is relatively simpler to solve that problem for an online +service because it has users. They can be reminded that their assistance +is needed to keep the project afloat, for instance by a donation. A +proposition that would be much more difficult to make for the author of +a cryptographic library. Convincing users to pay for an online service +has the best chance of success when the author of the software is also +the service provider. This is the business model of Discourse and +Weblate, but it is relatively fragile because nothing stands in the way +of the competition.

+

A few years ago ElasticSearch successfully developed an online service +offering. But when AWS entered the competition and was better at +marketing it, ElasticSearch quickly realized they would likely go out of +business. They tried to fight back by changing their +license, which was the +wrong answer to a real problem. Discourse or Weblate are also likely to +face competition from hosting companies in the future and they may not +survive it.

+

In the end, the durable source of income for a Free Software online +service is to rent the resources (CPU/RAM/network/disk) it needs to run. +In other words only hosting companies can make a profit when running +such an online service. And for that reason they also need to share part +of the profits to ensure the sustainability of the Free Software service +their customers need.

+

Online services vendor lock-in is cured by Free Software# +

+

When hosting companies offer online services they also provide upgrades +and transparent recovery when the hardware fails. But none of them allow +the service to be self-hosted. When their price policy change, or when +the term of services ban users from a given country, migrating the +service elsewhere it costly and difficult. For instance when AWS runs +MySQL for their customers, they allow to download the data but not the +software that runs the proprietary AWS interface used to configure and +control the server. Another example is GitHub where the content of the +git repository can be downloaded but the code that runs GitHub itself is +not Free Software.

+

If a customer cannot run the same software as their service provider, +they are locked-in, even if they can download their data. It is a common +misconception to think that there is no vendor lock-in as long as it is +possible to download the data in an standard format. Migrating the data +from one software to another is, more often than not, time consuming and +costly to a point that it is effectively a blocker. A GitHub salesperson +would argue that it is possible for people to run GitHub Enterprise on +their own hardware. But the vendor lock-in is still present via the +proprietary license contract. The user experience, maintenance and +upgrades are still exclusively controlled by GitHub.

+

To guarantee their independence, the customers of an online service need +to be able to:

+
    +
  • Download their data
  • +
  • Run the exact same Free Software as their service provider
  • +
  • Run the exact same Free Software infrastructure as code as their +service provider
  • +
+

The requirement regarding Free Software infrastructure as code refers +to, for instance, the AWS control panel and all that is behind it when +creating a new MySQL service. It includes whatever a competitor would +need to run the same online service. An example would be +https://enough.community, an infrastructure as code dedicated to +creating the services needed by whistleblowers and human rights +defenders. It consumes resources rented by hosting providers, assembles +disks and machines, setup monitoring and intrusion detection, installs +various online services and upgrades them.

+

The availability of the software that creates the infrastructure is not +only useful to the competitors of a service provider. It also benefits a +non-profit that wants to provide (for instance) Wordpress instances to +its members. Without it they would need to create something from scratch +using building blocks such as CiviCRM. Even though such building blocks +exist, this is a significant undertaking and effectively a blocker.

+

Federated online services and durability# +

+

All self-hosted services are in danger of losing the data they contain. +When a Wordpress service is hosted in a home and the machine dies, it +must be restored from backups... when there are backups. Hosting +companies ensure the durability of the data with their own backup +system. It creates a dilemma for people who are looking into self +hosting: independence is desirable, but is it worth taking the risk of +data loss?

+

Federated online services do not suffer from this problem, because they +can mirror each other. A Gitea instance that is federated with another +will mirror copies of software projects found on its peers. Should one +instance be destroyed, mirrored projects can be resurrected from the +federated instance. Not only is it a practical way to ensure the (rare) +failure of an entire datacenter, it also helps with the (more frequent) +destruction of self-hosted machines. Contrary to backups that require +special attention, the replication involved in federated online service +is built in and works continuously. There is no need for an extra backup +service that is very rarely used and therefore likely to fail when +needed.

+

Federated services are not yet mainstream and Gitea is one of the rare +services that started to implement the concept. In the interim, +customers of an online hosting service will need to worry about backups +to ensure the durability of their data. But the ultimate solution for +them won't be the emergence of an ideal backup infrastructure, it will +be replication (via federated services) that will continuously ensure +the durability of their data.

+

Paths forward# +

+

The Gitea project itself, following the footsteps of Discourse or +Weblate, could provide a hosting service. Part of its current user base +may become customers and there does not seem to be any blocker to make +that happen. As with most successful Free Software project, people +working on Gitea daily are already very busy and cannot engage in such a +long term project. But Aravinth and myself can, if they will have us.

+

Another path forward would be to wrap Gitea into a bundle that existing +hosting companies could easily use to provide such a service to their +customers. The biggest hosting companies are unlikely to be interested: +if Digital Ocean was to provide upgrades on top of their existing Gitea +image, they are more likely to rely on their internal staff to implement +that from scratch, as proprietary software integrated into their +existing infrastructure. But smaller hosting companies such as +https://Octopuce.fr or https://Easter-Eggs.com, who already deploy Gitea +instances for their customers, would use it if, for instance, it helped +with the upgrades. They would then kindly be reminded to give back a +share of their profits in order to sustain the development of the +service they deploy.

+

Finally it would also be possible to follow the example of GitLab in the +early days (before it turned to proprietary software) or Codeberg and +offer a free shared forge hosting service to build a user base. After a +few years, a percentage of the user base would convert to being paid +customers or donors to sustain the activity and part of the income would +be used to sustain the development of the service.

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/unsafe-repository-is-owned-by-someone-else/index.html b/blog/unsafe-repository-is-owned-by-someone-else/index.html new file mode 100644 index 0000000..a13de03 --- /dev/null +++ b/blog/unsafe-repository-is-owned-by-someone-else/index.html @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

[solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else

+ + + +
+

April 12, 2022 version git v2.35.2 was released and addresses a security issue CVE-2022-24765. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as Debian GNU/Linux, Alpine.

+

If Gitea runs as user foo, calls a patched Git version and a parent directory of the git repositories is owned by a user other than foo, it will fail with a message such as:

+
Failed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository ('/data/git/repositories/git/data.git' is owned by someone else)
+
+

This started to show in the past few weeks to users running the Gitea binary on Windows who also independently installed git v2.36. And then to people running Gitea from snap, on a Synology NAS and then people running from Gitea docker images which is based on Alpine.

+

Workarounds# +

+
    +
  • If using Gitea docker images: +
      +
    • upgrade to Gitea >=1.16.9 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 and disable the security check entirely with: + +
  • +
+

Bug fix# +

+

The bug fix is for Gitea to ensure git config --global --replace-all safe.directory '*' is set on its dedicated user when it initializes. It is effective on the condition that the git CLI version is greater or equal to 2.36.

+

Bug fix rationale# +

+

It is safe to disable the security check in Gitea. It is not vulnerable to CVE-2022-24765 because it calls the git CLI after changing its working directory to be the git repository targeted by the command (for instance diff) or a temporary directory. Therefore it will not explore the parent directories looking for a git configuration file.

+

The security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and not because a parent directory is owned by an unexpected user. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in CVE-2022-24765.

+

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 or from docker and modifies the global git configuration 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. 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.

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/zombies-part-2/index.html b/blog/zombies-part-2/index.html new file mode 100644 index 0000000..018a807 --- /dev/null +++ b/blog/zombies-part-2/index.html @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [solved] Zombies created by Gitea | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

[solved] Zombies created by Gitea

+ + + +
+

Gitea can create 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 there fortunately is a very simple way to avoid this by making sure each Gitea child is a process group leader. That first step was introduced in Gitea 1.17 and backported to Gitea 1.16.9. 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 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:

+
+

syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)

+
+

Not using the default Go CommandContext# +

+

Since 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 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. In a nutshell:

+ +

And with that... no more zombies!

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/blog/zombies/index.html b/blog/zombies/index.html new file mode 100644 index 0000000..74822d8 --- /dev/null +++ b/blog/zombies/index.html @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [diagnostic] Zombies created by Gitea | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

[diagnostic] Zombies created by Gitea

+ + + +
+

The first issue about zombie processes created by Gitea was reported in 2017 and resurfaced on a regular basis. 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 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, 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. In a nutshell it means that when the child is killed all its children and grand children are also killed.

+ +
+
+
+ + +
+ + +
+ + +
+ + diff --git a/browserconfig.xml b/browserconfig.xml new file mode 100644 index 0000000..c554148 --- /dev/null +++ b/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/coc/index.html b/coc/index.html new file mode 100644 index 0000000..20325c2 --- /dev/null +++ b/coc/index.html @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code of Conduct | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

Code of Conduct

+
+

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 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. It’s 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 we’re 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 doesn’t mean that they’re 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 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 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.
    • +
    • Discriminatory jokes and language.
    • +
    • Posting sexually suggestive, explicit or violent material.
    • +
    • Posting (or threatening to post) other people's personally identifying information ("doxing").
    • +
    • Personal insults, especially those using racist or sexist terms.
    • +
    • 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 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.
  • +
+ +
+
+ + +
+ + +
+ + diff --git a/defaults.css b/defaults.css new file mode 100644 index 0000000..ce6b6af --- /dev/null +++ b/defaults.css @@ -0,0 +1 @@ +*{padding:0;margin:0;font-family:"Segoe UI", Tahoma, Geneva, Verdana, sans-serif;font-family:"Segoe UI", Tahoma, Geneva, Verdana, sans-serif}a{text-decoration:none}a:hover,button:hover{cursor:pointer}a,a:visited{color:#0056b3}.base{min-height:100vh;display:flex;flex-direction:column;width:100%}.main__content-container{display:flex;flex-direction:column;min-height:100%;justify-content:space-between;flex:2}p,h1,h2,h3,h4,li,ol,ul{color:#333}main{width:100%}blockquote{border-left:0.3em solid rgba(55,55,55,0.4);margin-bottom:16px;padding:0 1em;color:#707070}blockquote p,blockquote h1,blockquote h2,blockquote h3,blockquote h4,blockquote li,blockquote ol,blockquote ul{color:inherit} diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000..79dad65 --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.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 VI)QFL5&d8WvA1y|6j^PH_#c!~1T6pn literal 0 HcmV?d00001 diff --git a/favicon-32x32.png b/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..510d14836e3563f441c53062f66fb4b1a1ac3cbc GIT binary patch literal 9868 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�Tfw`^ z`)P@%CyKz}kiL-dTm4_ZU4qYopJ}ejhL(Qbe--X+p!&7`{1i=fi~Qq*gwN^Yo8?}j zhv)54gp4!td+XoA3c-{T5?J>ECBeNiXLZlQ^CS}HOSe%jOkaQRU%7PejXKrK<668V=)JtaP<_m>3~xbqEKF)sCP6q`@hjmup8dd+8(_;Fc|D|3Ar^caXX;! zwL>>y?cV#HAaQmcd|&j-?Ur3t^WyZtgsZ-)!Ux8c^xO;Da)1{F+;M6V!z{eGu$yk%!E zf-Z1HutmdFH@QDJ#+IB#mVzU|<2t_nwBNlX_^zQ@U*X^e&sf}sywb74`HgWV#6%Wl zil}&TsOu)=DIacnT3ST9V-%eyruiVL5nkK(lq%M!x$1xE+e zKl4b})N7$!FCb}4=XwoN12i345@iV@NNjj|JU;Ae9Uu{zastyww06^x^ZVPBKXm!j z@4*lHsAt!j-NlKROD{0fq0F9V=yhNYTIJmsMljK)1=h-gVpAP_qDqBMN=D#@)hIQ7 z7X^uUG;}<@0&v|@tepzB43`h(I!qhzg;?obJyaH~Dn_5qIacNN+Cvju=hit57?^YF zS>v1^RM(dot}6m8_di68R!2mBGY<`7b?~}v8p#h+ZdiEeiO^9lLwduL2hkr#z_&)i zCaz_qLRoG`;t9&-IF#W*6h?O_C^r!ZW&W1lxrE3%SjIm)L_jwBmE>!O-XwUl({iki z7Jyu^v7}l%$0nvC!uWRhA-k1ruPe!r=N0^R6`aTtzhzY9v?5DL#0GryBo5*|?+i!( zqfyizfEi9Zi%2Luuo{dDJ5 zitMoQ<+rDlhLi7uiLc>4q6onHzneqNAadF)#LVS3UUxz_Mhwh4#T2B7WoNHTJqzoo z^Hyx;InaaU87_aNSm;ym=uhYX+eyng{>{Zj0NH*(Cb$59Lxl|55C@SyR@uFmohD!y zLY&Y17K7o5qwwnc>q#cSaYxV6PA*~NalNM^WykIVmwCnqeYaNjw-oSr_CmY0XuJ zGalWKv!3#?el79o`{%kAi=tgDoPG?&vQI8QUXy*_bk}jO_1>zM<{ZFIwDV+Rb0f}c zwm9@MCr^VZawh~k_$5wX%LkaO3-&wuSi+Za9W0lwye?{s5{ z9EwZKS0P1PuJd|_1Dn$SeOvm{6DJ8aa*=!QH5uS!^ka_#55SZXgT$g~sue%IL&_Y9 zEgiZY?+U9Hni#-ri29j=INlC9|C_5OGu$g5M~C~l))P%BC#OwbG+*5d4e_5UqMK7> zmT(@U^ryyetAqxRiV?1s_eL9Rm9yBYcg40FNTFsly9f(%+gkWw;cRV$GsylWEfL z+7za7iE!-;!Nv~J(nBO1QD)wJC9)MiuIxsJEg2`TKD>E)XKTzNs*EQWKYdN7u#=u~xY$LP` z`Uw39K10$s$eKu`8tN;U@Ac5(GOuGPIOV-_E%bctC&Le9%9w73HTO~`XGt#q=<69A zmj=TzRn-+r9F@9z?K>`RqU@Yk;(O!PUf@>{$i^7)Phb?51hrW8T?Q@81h-9nl zlQjmr@1|my6AH%0yOgrDRLn+_(&Vm-*%q0O+&!E`5Ta}IYI=oSTuSmQ-_O&3+xQMEABXG zxmbv^(K%-M^VXw6(!vC5BK~qxF-$^Kzof$$SySjPe6w8{B@r%`G?@R)5?>aBwE6X{ z*G*|@%C_AnHdARdb$t6Ocrxa+u^5b;7$*pg6yr8!5-eqgZZJW)IU+JAH~Lq=K88#g zlTv@BblpIUl0wX$YGb+p57Jt<#yO1^cQEZCjU_$;S4QQBC31z?H5uZfdx_h7!tjr! zm&kdDnc3J&;a|9zL{Wr2Q?WdRw2%m3@#+DYrOj!LwVfQ$TlCa>KCgzs$Wl7{71`_X zTcms9qC@H>7rZ;XiGX4p1+RJ;Y~@KD8cuj6(`~Ine4$BCu9lG>NCw}IAbaiehDi@hMWwt%XnOE{WsA z%G5tn*2PiKh|Xxc$N0E#5Px!2>5h&*vBTPk5F*`n%a7v07z4LIYWblX(Y|&EDa7Fj zfpJ5i*cO}oya4{2sH(he)fmjpJlU+JIua3v9_UB*LPCUE;1+eUbm(`&U$02^-Dq%O z?pm95rHd7UY4K*OkW|F0jrE%8$9F-rZU=iY_7O5TKVS8dNSNPMHgab>6UV* z=x|GCq?PvFT(^E#9yiTWPbL*zo$qn+7-n(bF;v@dJQ@6vy`=r?-zh<-rqJ?YtTB?l z^zdP0?2YY-eME&nvS5A%GBIpR*wx5V-GpK}YRC^eP2&}FITat0b}HHOgVY|8H8+0} zzMbrs%8Br%9qdNKru0R>27v_};`F2)53*t2poo6!W4vL4v3J0J!of*sp(aqsv*s53 zm37%#N?a6s9;_k-Up}yBg+2W#J&_Qvj1A}8OoP3jN?nl~u%Tj^Fg?}JCzgAbn`inL zF>jtP8H;E|pw*ZPw-yZ1hBDW}Bw=QA2Ko(s{x5ooin?Dw5U9YmB!39C?8o74EA}2R-Xb3p(dHvzFq#<24g?Mm_5;m z6Rhf6BFyZNgPlYoc)}IupkWb7AsntDM>_CWrQA;gRO9p_RxR`gv)4!tbL{{EPPGUc z1#jaeED&xqP~ytvvI4lMxY>3FTmim2BFg&7blKCmZu5L;8&>o{J>QtU!SLb@woff$ z0N5GQ6(^K$viLRI(Md=sPm>76j4`@o_r74u)>r++hn-L_DnF;)@w4wUy&$p$)P(T zk5gD#5zi@eJ``FsWAi9B>uz+v-|+rIqXdpTa2j$bN>4W|1Pr%XdGGF;)aI5Dw2aj> z!p{%`@4MU5WZd zA>l{SxfBJ^mP||S_h;)lwqxtQmY1_uz+e`wHtT zt8EUhPwWw4C!P#)M}?S7|5hr$6bhX2`q-96#cQ>X#xQwIVt~aG97Ryw zK~6!EMz}I@Y+l3 z%Hh56FAzR-M?)LE)AW~Ptgt&ABc-3Gg*jq#qNkL)PVO8HcZfiHbCo2$f67NG?y7ZCQ-EvJY zo?ne3hN2T0j;$x6jq5G#y|_h%wYM$}0(tSOu#`4zyR=t-cPtKLMXf(!X9&N9Z}^Fx zSjqGk9G*k9(-M8%Z|v51A#WL%(v_i{4zRl0G23zU_)KT)y6R^Gl$iSk*Hu%v5Q)`O z4)GaGL!cRRu%Z?OkvP>;KZ_!jGYlS%E+G$P@N;!Js?mVN@(jyD=q<%n@BPYI*=o{8 zBJQvk9>D_bHQilMz#AvSVY7)dXd9knYGsHBP0?|ZyDj#BqA>utBsKhoUyea4y1~*8 z=spCri+~K>%7k^`K-#?zp++7qCDNBmw;AXkvJmL&Yh#e z)}-1m*()Gas1oBrRtcOq6#M9j6Y@Y}_tJ3*(K9U}p}# z96R-15u#4e768IvozOL#=#uqETE5rK1R#kBe+?&9 z+eR%P=6VN4B8*y<;c;8_KABfFT;FW{>)p*cKQrfc#I;Eo*C(z3#r^i{{gkFKw^HzS zFTb&8{zx^p4t0fDGGy*)&evSa?axE^m4i^XeGx!HBI8y!EDaFRVGxOYJE+`L>K5zC z@$gua99DOvC9=+%@e?svwI%y%Qcu{fuB6QVKw0F}qB_|XB?oH!fG|b|LWYE7;F*u9 zfSO_Q0l=@-s*1JT7L6ISfTr?YwNWerr|)E8k=603o*~UfzpaVEoZa!@;UU^r+$6oa z&!N5@1zm@W9VG9l>*!v${!X0jo?XCum&7gqU>N3v4;xFMhff<{POV>7DA3$kQSyxo3JtdV7_u{PwMPF7 zjN!X2ou(^YA;az{ob%V%JGU3D7zK%RppFt{!Jf}BnG{@Tghl8pwEm?yU#6o=;$`Pq zxuDgDS_|F!@~o!)=o;HcT}qVi2GOkq-gdMpedz94r$xe=IX6x-x!o!(vikf+*ZwmI zpy{R3?F}1Kj*?qvk2#0C5C&Ye*dVRBIh7y_2HQTq=QZC|p&_K@c!y(t>SGy@d=mr< z@K!*X(}g157Z?CJ7?7G@MML2kG}zMfo)X^eXA5KP&of|rGasTy#JMNb988acr%*2~ zy=<$>w`A2MQyB(dVb9^TL>GJbLYlbsNE)=;B$Sh-WNgnK^Z8?i_5@}%?A&I~Sqpc? z<0eq$7vj#z)tI)vT1R*fEjCu>Giht3Hdzo5Mfh^ATu^^>b_5Vz;%MpI6fcovkIh#V z=1wo3@$EPk-$W6{63Wzv`9Eia@N>!4e|j&QDK>!p0A{cu|fPb|pHT zt2=;Lm*KNbK>*e%XF@-Z!b0ntl%Hg=zQxEVQJyvVw7Q`z@#R(OGP-`&D3S)NWerd& z=j76Byg(Uj1();&f<2KUNosES<;gF)DGYXF8guVXVOE&GqQKHXK!KH9G|iH63b~&; z8QsRpF_`$GRB;@<;cn=azfdBtkPG{TqpkMoG&hCDem0}Fi~AaFbxpRtDEf)Jgz5gx zocHZbGoEqV7nR*W2VL&aiV5DT9wa$;4Px86O8y)KrDAOMMY4(sElK&vDHdW)3rDHgI-#1F}c;~0!zRnJZ0O(U%(Y^k=)YC2u4Kh~CEH0tG}QfE}A z7V2S->b-FpWuSor%#z4Dm281W#nbgxA3NZDsUldzU)P`Ommz@Tlq=&-%=8-Lms-iD zo%Yx($B`@`!IVe)G*&cBUB}KFcxn1?26nrd^}QI{mbTIQU1RLqW-%=bBE=3@qx={= z^Bdwt_M^WKt+>A_lhuoP{aQG>q~|HhXX(oBz+jEjY#6Qco;wB}r4n%$8{B9MsP{{h zm`P@x=O^x)dmWy$e~cA|C`=|ZR{De0U1HTsX%&VsS);y^2BOzv76q>x7?32hU`N2~ z0OHm6;mSn-=m6K@C;4uuLAEc+kR0|7Ow5fX z{l*@df?n3y6`g6qDZCVeg=z&xzcOYNBwx!hk8dL~i{44EanWpkGBdo=LjF@K48b8P ze6c^z7*)Vp9ZCh_)rF{vVpL9`iNV=NjX)ETT%77N1pT&w&6-X`8-&lFd;x&m~D-)@9%-#?Uq=pS&L||o- z0HCAGmHI1UE_Y%grhn`NQUF&Z=|U9@zAqSolhakuyrao!Y-Y6T6=u`x8>$hrl-!*S zjD=o%0_}k?l7wCrvxr1UWK-|#a}fk_1dpl=kX&k{Ne$WqN?aT-Qn%b0jf6|D+j4?Do>#dTu#c`wKD${B@SdoRyepj&(C3 zd(in2J2C7fzQHivYtAZKvQIZeru=EQV&l`M-nIU|Qb5L9?cypPf>Zp36nxSp z-|-}CYjfR+6j};oDYqg-J%ra@?x)mE=+`b@O}^!~YbOoh@{}tuYAm*YE>2Tp?>6I> zO&lHFx*p(|^h&q2JZ$I+rj|%S^&oEDZh269d>@6WFjwt>1>KLcdS!#y;fW11hv>Xh zi8I73uQ31CnC^{X&WX$eFWDFZr^bo1KEXuW;}B>~UCDhc_sgfDpaVH8nD8%sgkSaBzr#XS zV256j)?Po|D2A~!(3qW~hvFz>R9D$}*)D$JG>c`GMWcRde;daycw57Tu-CMJGMrWU zF!FJvNa7UJo;@%WmDigb#8nMP-2HFN1;*lc4>gf%eMY=U%JSN~CuE>ApgUveKz{k=t(2~Pxe z6H_cpeWsa=_+7G*nczY#vPf~NW>&sBd#Qa>O>R-U{OxH#;8V&fF#`eU_@T_HB;)~P zxh_PuQ<=CV{dH;AA_~zbfSW3z)H{#@!M=Z3QaSmiRzqXw@QZVB1Dz27 znpvtk>{G6dTGD|N&a6`VK;zmOrjxg-z~U>D&No9M6$2!3MJoZm!}z=pS%n2H`_Y=WraDy63$<9CQa8zY zH2^_KcYW5=Vi}u)S+=642dUDKjqeKM*y25t8^a>8r6X?o-h%7XOl3zEc1Al2`GWZu z6_Ai(qn_CpF^C^bW`w>bCs*7^xb^q!>d?K>OoJripW*zP=FZUNk;z!P<^M+n!S}mUcG(bUAcCHHjl(y-6=+JAp|{fMMA)47kzriJyTCQ%B&-_#fTVz&^L}_CDa$m z`yph_9|n6uIfl9wuKn|X#_9x&ucoC!w1q3(?1>#t_n^1|b?i31zb^IfUgHmHRsyM6 zL`;wCot4Zi#2-Dr~Vtt`2ecgWrqeR^LxSJY}@h*M2k%B_~)^Jv4EZ z^J~#2y6F(BE!HcN_pau8uPcPkw&s;wS!@Z-ue)ia8I$3SvYkbv&52{S!o_qGihIi0 zxZ-rsb1cXzA-XJhJ?OMh}**5E*ysULSUzaO`PvMpjPGs=~U9cTr#!rC9-xfuu9 zt*QgT7Y8zo7Fis-nzhdsOSc2?5o`@3Evu0LB*mnC%`|%5ET@)r3Bq<7CY_OBmauV# zT@_Rvp5vdq!e}$PzPe&TR#`WyHCG5B!qWs3px1>sSEa(EB@ zJwsS!sbuLI1lFbS5j5W23hBdSl0fY>(v$!$a;A56?LlI`zQ!|U)j$(h#qyY&t6oJE z=!1E{_3vYcdf6Mz9sY+m2O}gs+U!xBRq1Pr!e|@!MDn=?g2Zv0wCu=GY|q9R4cT#Y zWLaJ4>+XT!v?Xah(NxFAio_=U&sMfY>|@pepR2sl+c>luOWF{A$}hl>k-NT`U0LN7 zTs6}-4JON<8e(;jOv6(5a+hK=qe0(o8fT<%vv6lS-;K`yu0xkdj787E#p4=^ho+l# zx_h{whYTk<3L9y{+-W(DkbYQ>Vo-HFfO4c;yc2bR(Y&T&rEqlGq~1VU*{xR9@V?-Z zr@Fpx8{^EuzMrvd$~;cpRI}C=F^oPBD%=6uzVVk1cT8_SY#mNtALPV(hfCf3uGkib zO=zg}SLU+hlfAaV*>~OP7GcYtd=$4OW`Qa$g?CRK&Rj^}^-OpgO_1=bXgp|2w6#uz zXlvyUcFTE6lS$#PyKcnk>%ZXa^70_#S|lg9RTFzTat&ZDsPG_=Y@@+k)jwAP!4}y# zprsV_2q&*=i(luOP9Y!mw%}k@*5p?~Zwcg391jo4CMtH|NchUKxfVt+C;P@4J#s_7 zORJREwO?@sTdh0;{C_`+YGhEKM7t`Eo@02bb(qRYbiXf}qN4b^7q*FbbAoY2jT<8+ z2FFwNE14H!4~A3ow4{AcO=JP0UTAAAJn>`;l;qMaRdt{Z&0hw35*orMDdX#N0x_M` ztMfC=8nQ5l@vT}ux~O{#^Of!pme;AdOyHC<4=!G^L}JB)Iq$W6{ovOfU_yDk7_@C} z{Xegsgg#Cu(N}G_)qpyf#xwk1BlO{sAlWPBxSBelLrsd7P~+^dgwG-X4uTN~5Zbu5 zA89ACtNNt*Gas9OBB?i<-SVlUh~%aCf`bQXkKZEj7sSjXR$w3nU`u{DhUR%=UeKY7 zbQdC2XLvyYZ4ap-4LuNoYsYh*cS-|oW0tV?YHiA=TB9x^&htVH1p}03TrsN}YfL`V z%xHEw?X^`8;h4)lQoOK{WL+5t3nb~|iPzy@Le`YZo5#LX$-@%D3e{IEskH(wYU}(U zo0g^=O1GXAgeok(>~66n1Mrza%qgmE6Uu~NYaU9;TaOc%Re46D$mcKl0HiH5^0&DQRWDX*iGD)%Yyov__(W=GDZ%id+ zuM4H5N5A2GG-C`2wHA%DfkzWdDSdrkG`N#B`4g9a&y^@JbqbKi7>SNAj?H)!AbWGD z0rQ-EfJ|NOgAx?x?tU2e-U(|%lhLfc=v>r5Gf6%mPT58$EV~5jH4sa)Vn$bQE*BGQ zxD(r$jZnplM5oX;f9?iy0eQ7GopBdZA)k5Z&SU^Yg4> zNCC}+{y`N~_q$*Ak2g?MZpYLh{|TY2So>)e9llb|mPzU|(_yEEcyaPdwh+tPr`O-? zDS}NdbLRR({EwHjF$;k->Em&$)ncl3FcUnJEA`k20+l0F1&RZ)aE1*Zt0Ca|$XSiI zro^lcUV78JH*Fiypjt_iY^#&`2ZLtjSn-9Rg>{wWzB$8TJBP45 zx@4}qUy2RmlFQ#bq%hEtSv_uSw4WZjG3*vl^N|N)t}@6MUPp-NGA5WudQN`0@$|}O zb1JwRF`{gHu09~$)kveJPJsz(D1c^I+!sGb?@)|fA}%t88rJ$DuRfruUtwL}F_C}q z^N!`DOQ(@QkZOxvReQQnA~fW;Swn>rzIr5s&Ba>)e%Y<1B%0;9B$628Zfl?W z9;EX#MA`5&Z-?n3)|$2O)Nw)b55=jpccS|HFeqI<$GWC_)Onc62wv?Ck|U(z55|tY z+oZ(z)xMKW%wyEm<8_NpPWJ-`z0w-%cg?si;I{XVxa0)%h!kr2#-wRfn^M|8iKI^) zog&}c!Li9=*Tfz1;cXPJ%)w~$HY@h({Y25wnRkm7ZxCjoQIN_P!X3b4WQJPWr3g#l zu$&?m7~oJH&9G!50b7$C(S)~|xY&!_20v?DQyzgKJXQlqW@ z5xl4FLzj%8kI>s_tJ>z!ta7?*pOHAbvK&^!Lo)6;CqAxCZoEanHGY39zx(^b3wJ0v z?LE8{fChS?RiGO)ra^C!qqf(^o08lyR9-rl&Cnxs@(Hfd5L`1-NhVT&Jl60*qi3{= zqJZfm&UQv!=@HS6Bz8Go`?wRKx8zEI`WF7GREVqyv>JLaWoLx)2+1HHLt zYrxuqi0!Yae$cEZv^wvjq4N1>s!IN?407LwtC)|41LF#!B|qzh7wT%z!`kAMJ_V^h zoH#YW5{bRf*Ct!dKNLh&D5#W_Rvhb&$qE#*Iq@`|wWHoMV%m6*h7Z>;Eh3bw7Y@_g zaU=XC9$uu3ULB^UGN`>+mHyhi?WfQUkB)chMY6ISf0K@0YQFc0{Q@K3x6;@1qmh$K zZ8Fw{DVX!TOLtqx?YCdl?d`t4M{=6-T+@B`UFS?kLSjIyjcr7Sz5sItn=0MlZ1ht) zU0D0N1IQb96JM4cWv>)7VB7OJVvO0Uu2Ls=$UJ8O*S!carBq(as_5O37t_mzI43&e zFP(BaNQ0Um)gcgy{AuBfwEn77z0hMi?HKXna)dS?&jJ*^vM%vFdH*<0z;t||3wHs_ z?16&HwRfyjX>yK5OQu(%T1=f`GJ6YvSjT++{%Xom2c!82%o;zWsb#zluS%S4G?NWQ zGUVyN^G!H1^NlNS*+ol_ykub~eWahOQ9lDY5jsob)km?^;(`)sH9e}eeQrkT0W5I7y7NrJl*Fkud2G z`wpv$cDs^2>U@?ju8p?RTvJ`c9uT~M>W@fxwR}f~^=d(~QU@_t4^mY7pNx)O7ao^m z8gld%DMv#uX}Qw#G2=M45E@!jt7mIWi;jQP$R}V+-g+5W*kx$HS)FMY53uL~Q}77} zrN%IObk@ky|I(yJ4B)(7^P_i)Eufgz2(wW%JaJqId|Wve_m#KP^IGlPF654t6-$dt z9^LUgwR>AKO#_QG&)0tvo}6VfJcrj%Q?0rX=zHn5dirW`l(~rP>K#E2v6Zm!bh2G! zrEZ(hGA#V89uj-R+<*jy%-mZ*Ec+Gi%YSw&5$_2+jmUsIo$>r?n!WY~OExlT?}gXC z0^J%GQLm=is4+vPVl50KZq2 z<;5kT`WZLF##?3CXq#@^ub*YEj?-lXSZZh8)rHXs&cYju++Fz@|ItJmBBctt~ z?n>~RQVDHyxd^vW^JIgN6O}$#-Jho_kp7BqPV_>75bN5K26c1=_x5CLy zu*$;m#ueH}bq(4SV5PTaQO&tGFt@Bkj!7f?k^lfqq@9e6hN6tjzwJwZaq~7PO-$jF zB>Awp@h}Y=CL#W-+!A3!Yy!7=X8aQADgq-f&d#4``Mh+m*ptH@1_n}wYa$X_>M`rX zfp;+5hr8v6H1y9LuUca-w>qfK&&19)VV++{Ra-9!7Tag1sWC)4I_n<#$zgv&1_LzX z@*dtYRc;COo_*UnF@0;}SM=x+nbkc8D3TPN@ccxx2`t=f^_+Sf!qH2|-}cz%ieOjx z1@&6l6PS{Vc@pKZw3_`fgkxEKhV{LRA@5UQ&ohB=y0aFe5~S}S{f_v$ksmdN zBJe5`@X_4y5e$F0f{^dE_AK6hx{reGi&)><-nR;{7FTTe(6)>-^8v%ewLF zVv*-qD)}qPIddk!xy?^iq2k|!ho&9@4yQXmVW1lN)nr>+*u-pFHy=m4A_{t*0xB22 zV!6({SB?&U0RaG5vUV@`2^grV2!mam*g;k>=zcM)Mc1@XO~v%^WnqzaX9tVl)P-8bBErcL1^lX4E)0hvUKtC6r-Ve=?DIk{7vgbEyVG6`CR$SbO9 z{LAK#j5c;ou76qlLH`|T1^yS#)yv)SFN_tK1L6pAdI`kig_-L=;9uS#&R^tz z2_-D+0`~gDq9`jy^CtjdD;KbxmGEC5`FO4P1g*HZ*tkHPd~CcBD=?d&6*rho0Bp@; z4Yn5Iv*hLf8q1`5T40yWLA_gB<@J)gLOW7b*cEOCc+MkTn~ZB_9tPFRvgEo8?RWvkCBV z^MQD|xdeG3oPSaM5ms1ALs5)|oBeMs8jc`OYZrGXF&Y&+XD{D>hw9ilL9{(Ve?;Tr z=jZ0-;uqxR7U1OJx)!F8+ zj+dB)W!xbkPZxI`7Z*n{nm;iC|Cs(&3qa9-X1TD63mEjL8vX)9to{_rKTAa#WW({- zp(w|H1^$09Y1_K^IRAg+`FH5QSft!NeO%lf)ZNuB?IB>#|C;AN1OJOj>t&Mi@O1Z6 z{6C!3|ArI&M_MYp*t)p;{ms8N#O)tP|CmV}?f#Mq2>h#hg+bsyDvHr~fV?4Ae+|Kl zj{oQa+k%{JATQJ8KWpUQ+U@?6bOmvNAVPxH0&Lu19xxj(*UO8gpdg41B)|#c1X+WG zg#LGS4;O1sACNml%I2krUdH*Qg#H?5Ak$x2_Ub>z;$sVW36h12Q<#&J<{!fg6y^9c z6aL%jiT;@@R8@ulE`aEtxkOm;PljoGxw<;qLEQhNF#nb)|1Y?|+5a;s|4-(BhyBA^ z#>Lg|r8sRp)qR}*OZWc?@E;5+c3_CJhs%Ez`rje{kmYX|jF*`I(e`p7dbzG~{OiK@ z&$RecIsX^`{+Vw77d^aC|BsXZmcIWZ*Z;`%-%{Ye1^%Dx`X9OeTMGQQ!2gq7|G&wF z`tM6)i1W)AJ)f6_Z>S5O#mk}@(NbAn7V!Jeqqyf?#!Cx|tAe2i0Dy+`=Lr*HWuErZ zh~%lLDu=X>fbCni{WTF6AhYBWC>aq2^X>*%t+7HzDRLxd6b?@ah@x!U9 z;!C^laj}7lxYGU(CIt{7_%g1|%P%RHZ>WM|ker{yo`PtX+n@GXEIxTS_+9BsjOd>* z=CC%|p;xLFh0(q2|(#;BLz4>5i2cODEr z!RKFn_tWG_4$0)w%LUY7+D|X~3w*wae@fZuAl_uYxqawistE`8aV=>R6c=kXF%ib& z|3E;!7u|CwS@RC9Ne%GE(5O)e+?gw~v>Tdc6L`v2B?}-SQwFbLCjZzc4LcE@pNCJw zFSrdkLKKA!zRH?zz8}V*!^;z}iX4B2OBuSU3oy8!3t?P6qZTqM&3x}Hq&tTb>SQc$ z6_rj0Jz#M(`;h!CESSHyBdXxdQU)azZC0$uxZinkQ(KY{+5sMNl<&6{zDy(^cRP8B z-p=bp*57np0h?oI2>P5sn_8lkFZb18$H8xAQXGBUx;&)QCRDAPt7anooIHHn&>4Oa zlrqQnzCeN3*OLIqg8Je4Cz3B*Dlv3N2Lso{)sYOoL*Bwqx<9!9@7H(pdYcKbkG3(` zvWgoP88&zUv=q??4r-n(y21qadl4;tS+LL$*+@7U{28rgK{mD6aCH&E$J+CNIC%Y; zE}g#8XI>>de2l7V$ywxzUKw_&4J8shDR`>lEq=o(?0SCwJ0T_TEWuY4G1~7As_?u_ z)O*nu^fY>B`<6_?AA?d?dXdhNj2wx#7<6OuXPhgQ@8Ei6KBm>!{rtW>T=(0H#r*eH z*9Ad4PTXCp`HoB!orWihx`xbv9E-4MyO_L3l9GH+TvrY^y)dm`wElDMrY470Ro?Y< z-Cjx8S&5In#ED+Rx8Akq$x0#tE`CBrf|MN^4L+=oZoWG4bjozwB;-rOgy94%ltAEC z6b1*E!+@nFMp7;%#Sv%NV6czmbi1l7L_;NN-uFH$l+NO*=AF>dIvUg(t)o6b<3x)u zsc-!kpz`UfUd|*AL00e^;Oaw4lUI%%%&YLm7{P zZ6RVWe7I%Unlk^Ln7ra~>B|c%_4NzN;Ivp=b#WD$83C83)5_z^Mm8OFSAd?iQVV<*_&a6 z!F3~|>y;sHXvFBr1{zIDZBR1B8~$`P0!*@erAHaY4URe)J^JO*lz14Qr<((0LvXQ+ zD+d!pq@*TYv^=-tM(Z1n;5&PMu{)OIu3t#u_g1*{BM(0kulGpK**G`#f#SLH$gz?5 zqNNYukjE|T`*b-`Q-3jg4--qNtO>P-Z|Cf>IO@g*?T^AVnhL@#U4ihs=sv;Mw1JoT zSZ=pezbEf}2@SKCizv}$-Xx|3WTY}*w5SJ1n)J%DzmZ@awCxiC@(3!pcSJh%Jx_ST zsBeaFj9t2o(<=;Rbc8}y5>ssaj)p1udoD!H&DyaYT-oB!)>wdQD4*P35wJ#k?<*wf zHjcB`8~4n*nV<^AT=t4?hQ>4WV|n`ItcYdG=p#&tQ_g$6&tAn|xLb|M&)cXvrN+AkT*4=20cBDf&(R{m#Q-6Z{{!;(*9^WkiEO$Q-)}}H| zVVOyNw;KXeutZdNkGVq?41a@Z5=m^D${PAl^+p@@w-j$axG#k~A@zN{(hBE-8*REd za%Pr$6E^_6^CU;U9<(Ws%#=k=z9t2Thi^uE^I^}=`UyS)PiP3Hn6|&xn*##}Va>aV zW#KI~pB9~vQ9rW?GEDN$%=#X9!nAK!gsLxnG`qo~SYlw=)}6yaUzda$-jZrezbBNB zg_5CQJbi*-vjg@QMiM!c-X1picN>T6{iV}-@Lb5u*Nsmuy|-TC&-ETFKX$2*Js)l; zc1)ovnIxwy8tlU4=oF|h6{Qg%C0S|aCc! zcR4f!;4|Ld)-&pJatTWd>#8!OkVm5~H@lIEyzF2NrCNlC56yb7@BWo4WHdSHB+d?Z zrB+VdtTMIP)vXHOQAv)>Fgq5D2wG9Mgwjh2f4dV9#GQ@}ZI=8|ZQG%ea(@YBS9hK) zIhxVxI^XJbsDjoKMz||&uY`%30ds1K$+)wcl{2@lahqdRK-W$RH(F zI<{xDYBq0vB*wt43zbzs2;vFfugsl~^Kt~ZuaHdB?%p7@p?4JLHH7?h9JI9ZNuD=| zvz(F!BKt~GfBJFzD_Y(B22=d{tfg_C+t4ue4Sw%|?pd=Bjgh%a znENDuzZ8@h%D@7RFE()F)FB}vDypA5M3W>DP2U>3eigkV6yG3C4eC>Jh!`tnkdQgT z{Y+he#Zg0_veicKL|voNuH&kJPDFA#k@oVlj6&uNUlP5k`2Gjt`Fw6OqHYf3X9wW5 zhKoS^DJK`H1d~9UIf8GuS^eFk`h~ZxQ4DN_a?<|+A-g^1Th^LuF z-n&$q-!Say!lJF;;wvRN5^5B#-ik0cLT=??6jev`cVpni65@_hQ$B$)JA4m!4eM!E zp0ac)*VfMNA~EA4qMwy+G{y#r|LfW1H3_Fyoo(Fut1UvHu%8P#L#P z9E)hO3heqp^;RRTBu=!3btZzHQaAtOBEml3-6i5e*+U?IF&SdL@n=&jYKj$1SJPP8 zz_-387bf%BWYX=n2ctpj8|E1rZpEjxJ>Cl{dPY$&QGqDgKtMTqi~``^pklC z$9H}x!2h&2(`s_^PPTD19gy>IsAiHsUwIvtEQH2Tjf3_HOj!+U5-ydY;6(BJXVN*h zV_#d;E$$3?y5cUXBN>T24y) z3#tvf3DxmIXDb1k4e>i2xiv!*=s(t@0c0`oE7Azn#UK?_BYho0K6zKuoaQ~w0HgmE z*CQz0fSvtm$|dIr(%|zOWV1!C``WkpPmjry z_uWOn1>ai^`Nv$zf?TJ&cT+V0@(GoJJf};I0GI>>2 zZ96WrYJI#okfh1$yrxc86`oKjCvAA}HSV}9x$t5ZopCn8Eo0d>wT;n( zwr`4qbw|sxM9=O)QmH($qLG{!XXBcu85nKY~Z zax?K~e$B~CVOm2cE~1(oxv%&2L-8`1T!j@crU(;LYMdMF-qhz^wpnDARJ?8U=OKu z5?R&p_yYuEHFV9LNBhjVsG5$d%P6vp_!zEclmKAnv-NnY$Phsy`g)jaaLVoPP}pl>usYb3y)?gFEU0uBBEUR`7R=m;^NpRnhZ!n^=1$01uRQL-$y z_9j?(!tu;(t!FHrX4OkOC>L^^+8zM}CCg^rU>aFKYuLbNYIMzC$fHlMWkyH_#H7_b zY^*zjORxP03Yj>zRR&j}d%Vbsh9t`fY;c{bOmI;(g@)!P{K3Fv9&l*Baf*&Emx_Gr zs(0XVGt|voL?{|#_lQaNA3n%KtK-aBv}CdkQB1XbIF3s`SKx(bU*e{(`~$sz{U;Xr zHWHTl@p>Z2vUbQxj_tT~4<_*%3iTl$$y5c8&{1U-7nfYwWg?p)TP#iqeLRa?m>cN>8kb7m#mP?m(dlN9`%waxIERJVCP5*ZzMunQymX& z?5EDGR@0tcJ;0pz{VjEkO&Ge&l2cBgea3V=9vxKyRS{^qg2!VJ2>9rnGn0mvW=xL< z`7m2Gr>-_k4=93XB_Eh<5@gB6>oup4OtiL!SY7Swcdz5%9$|yB z^6JE^XZsdrU3(kd8-Bs*$M@1w+09U+$?m=cAHMQxc6awd`WF<&%9Bl54ukD^JWi+Of!e3AZ4>#m4Y&f!cIY0;v#T%7Gh0i9EkR9-f~0xyni|5jaRs!t`+0g` zf{5udn99)%2ID1$#_}{o4J2V5@-`Hc5HnwL z7)g}5_5NYju1(S!kV)iS8Uh{)IGldG!C1;+EDen{CJ~>EJjwY_Z}zZqYl7CWA4fn- z`wSYwUNY%4GuxX`6$MF>P!t7SRmkLvJilrUe$zN)A$T;Ibz6HlY0+%9?1|G9vxx>g zAS7f-B5I^)wAS*_FK*zuon_i)bfM}ds;azUm-M=#ykQv3JNZ-s9gFGP{0N0)8bveM zGm@uRD9{i!kY#bepejoONfsotHfuJgS-&yKw#_O0s!L5kX4|;U^k|5J?67dQjO)T! z+F^L2%-Kuo$rf!wUNPB31#L|pmOq!JsXhvlN+F-8lpJ8oP!=1Ry08yP60F(M%QMe! zrag3cO|q^F^#OzReMyitOf5-$#Jd;OjZkQA4r3;t_>PgAR+k3{-g^*``~~Gza zS(ecig_32HDoM0Pd<>FjQKv#W?=qAS_ zuXlvZ=m5{JxQAVL{F<8S8oF-KJ>XLBlfktq6e{HNHkE=+(5DdgX_%Udp{nG{F4?k! z>k3wG$#TjfFAI+|s8mX9?Jd&L-onUuhPj9OX)7imRDO zTio*3L25nKc;ZYZLAERK8y;$W9!yO>;sT2-3AT-9scWJnwy=91IH)Q45J z_9WOnTxRQ_#L4sP_}B+dWu(7{javu!+%I>s{HGT&J~BikpffQ({+fgh{Xm1W;>IdIZiY!xf6vonmWX@)5PnwC0&CpnmIqg2q zUJ#}``hG&Sja=}ai_s0^(CBDQ)0i=L7MWC{RHC6tV^OUSuPM_Q)$w~|l9>uy_axaqP-0tOo{P>|z^v&_go1t~w}HOC zK`uC6Wy8)mrQ{eLXDlR{NbJ>dEK6|pvO2cx$+K~58gE{wF=`&QvZ5>r^6}~!v~0nl zcPK+`#DmvV(D$>ugs7620aM5Hd#Q7DX3cEFXKFOYbb1G~JhDT>%#YE~b~ed)lKQ5G zYK%MFVI8jHQYaMY-r39OXq+eR{xj=t{%_7WQ!uBk2A@aAG-Omosy5$NY|^<3>0F8a zu?kOaEO6fOCN^HWM=gHxwaYOLjZ}OX$ASBnKf#V+1LG08DHKZkMP0V-@~20}X;D3xs)QyBjx=9#fmJ;zS{r0aj!P!zFqkee zx5c2LMnO^qO)(FKE+b3TIAq!2PI6?LZs5oUxqO-Ni7c*_XRI=f&i8ztP$Yt3XaoZq z9kXWPIu1t!7u?B4&X%?&^0^#6y9%6e#+fL(58HP6*=Mg}L7k2)OGrWx_CrgpI$1!k ze#iP=STx7Q#tqj7em-Dim}mxUmmx9RGDU?j?# zb-Re?Bm#!TC7)W(iksd|B%sle%%RBRG{-dVeyWf9i>IM0QkBb@Y$tzt<#R6Eb`(&& zE_F=`z1vH4hRp*OZw{1{Nu?x#fFC#Dp*^Vc+`0^gEC_j3a%G29p+LoP(PS}Mf0l4u zhmtpeQ7qA$o5S(%_&9YfZJ1sYS#mK=ji%OSLXpT`e9}=-fF#RYcj-Hc22C3M8bQBC zz@srZo||fxl_iO2(4bhha9r@1HH;4ra_jOP{GazN?NKEh0>D^kvs=#0}OGnr^!l!X)zx)QeyH_!> z{Y9pQCwRx1CjH|My9SC_c~D%L8jniIRLD4aGLlO$9A!XmqU&AfF>Aq6Opl5z%P2Ag zLjgKwSAG6#1GspjBg=#kytHNws~&rjjd$P3m1j2+@+ngmTCP-Ys!yIS=^xE9o-B|m z>MT93fna?btDjv1&+0)ZY_twp%wmw0mGJscubOtIGcv@>| zJpKy&_0xzpwBQQ_P&5rq0k7X66b|7J1_=a%`{j(@@D6Z+Xk7z-Q|7FB4gs&S7Xne0 zSG5DWE}AOg_h`hkMIKx;#(OWSXT_QUu2?pkox>K6Rl-3=(`51`mxv!)>#GgmbxU+? z$3^gZ;W{padnDz*G*?m>_9uw3!C3Ri?SMnK=uNBYW<-q|+b4vTRDl zB9&69+IlD?Jbn*ekBN{3nkFMjF5y^|#-^sJZo)Uz7j!62v$mlgTheK((++yMrpko< z63=fL<(eyw=lPem5)63o`Mvm3ITGU|glZajW=nzAs803V$=-?5foscf_VGd1?Z~lb zQ-Ri)c^H(rVAS@qAQZ+03{$6b&P;NdEXjC+bUKG^*;o||TzfJBlL$w{sG5c%OPF3S zhG`!12%n=811gmYvEARoSKowXy9b1SUQ@-gU36V1J~~7)8K*JkK~W82zAUCMNMGL| z1LHPl9bZp6K1R7>?bQr$P&Z<`%jz6xgr+aXaR3?Gzy6nqXWl5l` z5^eP+8+VK&kZErY(p+ocH^A%nlTM}S8%hw11gLLnn*1Jd*zTmG(V%6v!f3W~NT0S# zqeNydL{S8??BEORJ^VwKWn@J`Q559KKS`F~&>V`RqJYM>HZJ?u{|i4gyICh7%UsdlH0VwaBu9FBoDZX&urW z1|gtttjMl`BC;enb#8#RxeA5y!L2f#wwOM5A(F81dd*`pn)9f*AlGp)41+lfX5sUh z6z0z%clJ4~efkN$`_R3-bFiMA#sB~iE=fc|RCb9O^+hC#R69SRHsT>yu<)1~W8*38 zqRQ^!3J55aK~gmo)gTy+v8#KKU4uoY)dne+DhI{!t+fU_28#UY@p0z2d+6I!A*>uc zDU<6v@%n=(!XXd}AW71jK9K6D&Kna5+B(~-6{}*IK;S|aoOCkTRFaW$33Flt;h}Hg zDxJ74Osn@JOM<7@?;#pADdlBsS3y-J#>Wacb_GdNNT!SA%Py*>A5;M^2jUqmCbsRe zb6thzn0`pKgxYyJvLYiCiAYV&F_{K-)Caz~u8U!s7^X=m5+a+)}+oh}7 zq^Gxh$n!ou&9m@$3_PZWkfb-%{c%iVz=4$E3;3BeZw{R^J7{bS)3op`hUb2Rm80|6 z-MbS>xWqyRv7mu0S>&@B;_(Suo2qfQP%QDl69s%)mD)HQgdqepHY(%}!T%!!S}2U7 zNJL`MVmG=<$ec96^3gnSA@2>QnIOr*R-0?L$yA4L9m{1Qe+KJa-0yFjjKA*w7PD=vzB z?8Nex9(|M~3Bxp*dE6`(ESbmR3opYy;d^Y|ogflaz{(>k`6>M0UaxV-lht##LlfoK z4P)BZstv2`NfZy5h^4XPdK(-NazLf+Pu|euYBOqP1S%yDBCLCQ=n1T$5z^Lurx;n@v0OENt@aGX!Ky zHkMr>5)L2)c)gxu{w9#OjRF)^-RE>E+qMZuf}DB5Su|eqJ+|#mplcFyrfGQfSMa(d zU`Ky}U)(XuNS{qdoxymojZ>(e4c?bn3l*EC9e!lpgX>u6rg`j*?2z&qNg|U>GCDLw zCY3qlgAa$g%H=ZeS+a!lx=vthc=UBv=(<%d{=&;Ir}>f_d3aTV1sw*Du1icEi%Mi| zzV^F*PHOQpyVip#$ygO=HqCvX2^L_e5|s&o*IQ*ukIB0b4p#xD$HP5;_&p!L{4$o! zp3N7py^iOfUU^i1tZiBB+OmaU%;2fzkCL32*f(3L3f^_)6||py6+RPo4dgI12}Ks% zw`ziputY<^sJ5@XjPZ*F3grrt5L17);eXkE8db95h?rUrUZq2p5OfN z$C#cVmwou71cD)+dFWnDPXMcIaniYGVq4Zx`!NkIZ8%QlfRHj)6QZlD18b8*JYAt; zxumidL*oTz*QmUfLz~Fk6w4VT0lK14wrz?PoBpiCyJ7(xS0+6)KwVo0@$op#t=_i> z3{5AKeC|V6(Ku};-hj?I7hlMifA~WH9{KAnIF3nTeC(+F2q6U1Iy%q|6W!3MZEQT? zwI^SAF}pS;sR^l!Br1$0b1dmHkZ?)lb2zSpBqRia=}{jIp)dnkne7u6Lpd2q@p93u zS{&C!5`w{%58=4ZQ9b+hh81wrcW>m{&wZ28p&eX$)l~$-Vf?`$v*yp|gtIPS(~HkC z(6i?iKfRBpqr*WvZ8K*AEoksAbR3;?<`5qnf*vSl$*uoy{J_}~xzjMwMI^cwhs z!MA<~bZ_6zspq|uLN3K==b!(&3Y6=*$V!zSHoaahz3M9J8rx{?>LQy-vtjLX{OZQ< z^T40~vUids%M1?;@QKSW=l!Ri$L_7W_L`-m8wRCf>Cn4RTxe>k<$^D*rlnS8H0j_C zNYpoKOpht3GR&%x(G^i`oUK&ImP+JGB`n*f&|l{K&wd||KY-V((b&@T*27RC1pPhT zG_*`7Ru{vX?8kq(2j=CR;AJaTHI4Ut=tKPcuYcl_E3f2<`|hBneKx81DF6B0Z}ap+ zPhwfs?-(B*=AS+9LGV>^!JQYsb?5x&}V%xGsc z@@{Ga)rsZ7h)jKxhSyg;W+Y=XoG3A#wMi5l%9Rr1TT3kX+&5{PJs(qtSWWnt72yx4 z07;T~{Qmnm<-CiKq^jjxl?s3P?Qgm5SN}~Wm14`fbv*FrJErFAJC4JQdGjdb^L+lh zzaX0);QD|4S1$j%kCI8I*|BjWrDBouy1Mw(S8pU3*7@=ef5^wb@)dslog0`Ksbc=- z_I8H)#;|Rh_~^(XKY(fKeBiU+q~BSLz@copD25>Jx@^n3%$+xzOU_%2za~aOwviV8 z4JUo)M;y2GB>aAzNHj=eTkBi)GE(KW>EZpi{h4>Z?>d^MO~Z9vo_OE^zV?Yv0C2-U z{lnCyKfmi?W-sU@5URdOb^FGREDqK)d*LDs(`4KF4V-XB9g-yR(TkSxnHzq{;GQj9 z^uG6@s46F(aRv|k>C^P>?xn7|fw_wpQz{IhsCqSE9tLq24CCVf~B;rE*~cXVOSyqImh2|T() zDqEl?YI52li8B|w_&g_~355ehYNDu`_Ljbi_jOUHYxYdM{s5|0CC2=r z5I^|iAKA5eGowR8TzBcEG&Hv&tI*Igtt#xkJ^(abClCrDBniu|7Q20c0J>>1Z|M?l z|IMu^ieS;HCo?+O&x(8QC!0=FDVLFDna_Xsd#rx^>1y}!VbRy1ser~;YBm~bq@(AT}7Tc~6t*PanTW;Z+ z^Up`qWN;;l`TP_LOH524A3;$(ol23<^ssZxptCu`xl5Y}_&r1-_3Rl=&#&KtXbTD+s!<5=RN3#f$8yZ|82MNnX9g5`R(`7(A-G-j5eCu+K^?L zryhEU|M=!N*|L5e#e50JvAO4#TX^jLyZPsjUO_JF5DbO*>+gQeZ-4v~t~%#zzVrFd zv+VM#iPY3!+cueW8co;v(%=6*AAZL&ioyf8|AqNi{)m`=oKPr8thSbX z*{1Az@ML?i?J8`3o4gTW|1rRE93I)RgRflof0%20`DL)jDd(NZRiF4cky;;JbLRrE zd+Sy{dD&$|>lz7!!aRE4eMqv)_Kh1@dfJ&ZPHW*Wzxx%}ed$Z&^LbXTSV1oBWA5=M zGJD}%VzquW{gnxW9-oha?p~gL_)&bpi>RruKcoQZxDMxD@*bXiWCiuHR?bZCTN&_h#e^HHy7ICcd|KC)K!eIC*iLQpIexc8P@cInnn%jwO+pKxw32|;~^_A>YXvQ;{cL!_pL zb1%7Mid}SUd%rYtWHN}q99O)4KPw-;n-kACn^=8>U^v9d=bSV3-G>ze5)G<;N{=aCBkfCZT;!t4-Q!JQ*`wYP0q zEW7M727C9A%fv~=CkREtNA!MrAq2a(_fY3cV?+bg#==xA2TfJT6e`SXi!tpz|3bWf z3+cuf;aKD?#r}t^fH!+Nj>F$x|LIrY?hy(_2tg*5VtRW6^&uTurh3#>t-gwC@ic*9 z7Zgs|i%K_J0*{ zw3lt$EIjKxvX+7s4x{NNwH_}*lE^j9A+h|kSleEpdEO%GnwpNt&AnOc4UZ~#+dPO6 z$cjQHmBOl6*p@}PRAGEgj) zUmpTb9jJB>1ZhJMWCVTyg6zOgfp7JB|9<$R+Vb+yebbUA7#5yd2X)n z)vIo0d~!nWl9=Z!xK&x6H8S}We zgo$;xax*icI4sZSlk%4@I}!62QypJ2SY(gbW@+Kl(jbEWg-}?LZX?@;pAvDR>wXLUu!tHXI(7>YfkUWpoyGn5kjtJ$k*hSJv;3q}!)jrwLXBww{xah;ikiojGJq zF(3zx%oX9SIe?#dBBH%nw9aZfU9b_ar@KUD`8J`~NglCw--*Z}LYQ3Pe`r1d=C_S1 zE4dD0yB$tg2Sgi`m+G4Ze%B=A2nod}$vP_cLTR@VuN2`YdjCMMRm2~(?-IVBp6=Qv z|I*Tf6oKGacrKsek4~0{#A0nji%D@mQSV*wr!p?)Ip&eV+AZ%+9mlP(8 zi;}zLC)fY@{$lG@d106DPZgvXQm4kL-Yn%-@`$O4f=`*57 zyeY5PAhwzsQ>o{hfwKxmoQDOJIb*-Ihpt-!(JxKUC)p}q?7&I+sV;YJ?n428H{ajh zR_^70d6$(3#>xj}aS?ki49ke7y0A{A)gESL9OmC9v5V2C0<|rIh_*asesGr2j%*UQ zWG$){XQK1ncvn5*((?0rH(JV4Hj&ylrNfy216{9y6j0KC^A&(pK{z)4zC zmBHG!0!_G)*hLtJ(0$enDp#!ab%=(M;~{(hjMDmZUJ-a&sP6G#JT2Ue&Ne>j7MYsW z(|UKn#foQ1aq z-Is9G1#9kyGInl85a5VOqza~8l z?;Hna*=IoCs4Ph5J|F+Tm(KO{sEumMh{~=5s=G;e8XINu4VD>4=9X#Gd^JtnV6S%U zrR=~MLTY-Dst&L!&W)X&xrc-ZY=^Vs*D%``hm6nI)6~!gJF&)Un1c#Xl>nZqyY@}eSP*q)D{eY>rr%P*NkzASwL7L!t*V!so-eU0LGdg$#kPz|Y z$G_fwGu>HJnMwTIa*x3=b-g31d&rOq0g$U`=;1D<0&>s@-pP9mE!FkSutw(KGBdMQ zKgWjeLeO4sH;1{I9>jTA;IREvb`bfo0keM$J$lr5(UY;8dJN3+8O8h)3{{5_Ly4?B z8YvE9^PHXNK0ZuwNy^x$451qCsequ*z(U?{xHq=SB%f#N4Ee`tnT@+m7F3k5K zpt1ni=4S6JBkSbZS6xYQK`*B|*5ODO++!1CgPxE5xn5*wI|3*;NNlbaUGhW;_W K)&GKj3;!R>+iar% literal 0 HcmV?d00001 diff --git a/footer/main.css b/footer/main.css new file mode 100644 index 0000000..6908040 --- /dev/null +++ b/footer/main.css @@ -0,0 +1 @@ +footer{display:block;color:#333;font-size:0.7rem;padding:0;margin:0}.footer__container{width:100%;padding:0;justify-content:space-between;margin:auto;display:flex;flex-direction:row;overflow:hidden}.footer__column{list-style:none;display:flex;margin:auto 50px;align-items:center;flex:2.5}.footer__column--center{list-style:none;display:flex;margin:auto 50px;align-items:center;flex:2.5;margin:auto;flex-direction:column;align-items:center;flex:2}.footer__column:last-child{justify-content:flex-end}.footer__column:last-child a{margin:10px}.footer__link-container{margin:5px}.footer__link{text-decoration:none}.license__link{display:inline}.license__link:hover{color:#0056b3;text-decoration:underline}.footer__column-divider,.footer__column-divider--mobile-visible,.footer__column-divider--mobile-only{font-weight:500;opacity:0.7;margin:0 5px}.footer__column-divider--mobile-only{display:none}.footer__icon{margin:auto 5px;height:20px} diff --git a/footer/mobile.css b/footer/mobile.css new file mode 100644 index 0000000..81263e9 --- /dev/null +++ b/footer/mobile.css @@ -0,0 +1 @@ +footer{font-size:.44rem}.footer__container{display:grid;grid-template-rows:repeat(3, 100%);align-items:center;margin:auto;justify-content:center}.footer__link{font-size:0.5rem}.license__conatiner,.license__link{text-align:center}.footer__column:first-child{grid-row-start:3;flex-direction:row}.footer__column:last-child{grid-row-start:2}.footer__column{margin:0 auto;display:flex;padding:0;align-self:flex-end}.footer__column--center{margin:0 auto;display:flex;padding:0;align-self:flex-start}.footer__column-divider--mobile-only{margin:0 3px;font-size:9.9px} diff --git a/gitea-clinic/index.html b/gitea-clinic/index.html new file mode 100644 index 0000000..46f875f --- /dev/null +++ b/gitea-clinic/index.html @@ -0,0 +1,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gitea Clinic | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

Gitea Clinic

+
+

How does it work?# +

+

You can get help from the community on the Gna! forum or the Gitea forum: 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
  2. +
  3. Upload your sick Gitea
  4. +
  5. Once it is repaired download it back home (or decide it deserves a permanent residence at Gna!)
  6. +
  7. Pay the doctor
  8. +
+

How much does it cost?# +

+

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.

+

Gna! Doctors# +

+ + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + +

Aravinth Manivannan

+
+

★★★★☆

+ +
+ Get in touch +
+ +
+ + + + + + + + + + + + + + + + + + +

Easter-eggs

+
+

★★★★★

+ +
+ Get in touch +
+ +
+ + + + + + + + + + + + + + + + + + +

Loïc Dachary

+
+

★★★★★

+ +
+ Get in touch +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/gitea-clinic/main.css b/gitea-clinic/main.css new file mode 100644 index 0000000..b723ca1 --- /dev/null +++ b/gitea-clinic/main.css @@ -0,0 +1 @@ +.clinic__doctors-container{display:flex}.doctor__profile_photo{width:100px;height:100px;border-radius:100px}.doctor__container{background-color:#eee;margin:10px 30px;padding:10px;height:250px;border-radius:5px;width:30%;display:flex;flex-direction:column;align-items:center;justify-content:space-around}.doctor__name{text-align:center;margin:0 auto !important}.doctor_rating-stars,.doctor_rating-value{margin:0 auto !important;text-align:center} diff --git a/gitea-clinic/mobile.css b/gitea-clinic/mobile.css new file mode 100644 index 0000000..3700d18 --- /dev/null +++ b/gitea-clinic/mobile.css @@ -0,0 +1 @@ +.clinic__doctors-container{display:flex;flex-direction:column;align-items:center}.doctor__container{width:80%} diff --git a/gna-logo-rectangle-48px.png b/gna-logo-rectangle-48px.png new file mode 100644 index 0000000000000000000000000000000000000000..32771e96deff7f6333b565361b86f50c6a6b328f GIT binary patch literal 15454 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 QRT4m1UR|zS=4HVD0swV9-v9sr literal 0 HcmV?d00001 diff --git a/gna-logo-rectangle.png b/gna-logo-rectangle.png new file mode 100644 index 0000000000000000000000000000000000000000..6963fe9c345319cf8836fef0dc91117cc5939804 GIT binary patch literal 20698 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 M07*qoM6N<$f}vYA^Z)<= literal 0 HcmV?d00001 diff --git a/gna-logo-square.png b/gna-logo-square.png new file mode 100644 index 0000000000000000000000000000000000000000..9f18e262cb473e551c489b4a7526b11da88e6d4f GIT binary patch literal 21227 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 a{{I2*HI?lZ|DS~b0000 diff --git a/icons/file-text.svg b/icons/file-text.svg new file mode 100644 index 0000000..4197ddd --- /dev/null +++ b/icons/file-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/github.svg b/icons/github.svg new file mode 100644 index 0000000..a1c5967 --- /dev/null +++ b/icons/github.svg @@ -0,0 +1 @@ + diff --git a/icons/matrix.svg b/icons/matrix.svg new file mode 100644 index 0000000..f37073d --- /dev/null +++ b/icons/matrix.svg @@ -0,0 +1 @@ + diff --git a/icons/rss.svg b/icons/rss.svg new file mode 100644 index 0000000..c9a1368 --- /dev/null +++ b/icons/rss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..a8afb6f --- /dev/null +++ b/index.html @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Home | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+
+ +
+

+ Gitea hosting and service. +

+

A free forge ecosystem for free developers.

+ + +
+ +
+ +
+ + +
+
+ + +
+ + +
+ + diff --git a/legalese/index.html b/legalese/index.html new file mode 100644 index 0000000..a47c3cb --- /dev/null +++ b/legalese/index.html @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Legalese | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

Legalese

+
+ +

The copyright of the software and content used to build the infrastructure is held by the individual contributors who implemented it, as found in the git history.

+

Intellectual Property# +

+

Did You Say “Intellectual Property”? It's a Seductive Mirage

+

Disclaimer of Warranty# +

+

There is no warranty for the service, to the extent permitted by applicable law. Except when otherwise stated in writing the service is provided "as is" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.

+

Limitation of Liability# +

+

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# +

+

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 Gna!. They can be reached at contact@gna.org.

+

For details, see the documentation.

+ +
+
+ + +
+ + +
+ + diff --git a/main.css b/main.css new file mode 100644 index 0000000..c85cf54 --- /dev/null +++ b/main.css @@ -0,0 +1 @@ +*{padding:0;margin:0;font-family:"Segoe UI", Tahoma, Geneva, Verdana, sans-serif;font-family:"Segoe UI", Tahoma, Geneva, Verdana, sans-serif}a{text-decoration:none}a:hover,button:hover{cursor:pointer}a,a:visited{color:#0056b3}.base{min-height:100vh;display:flex;flex-direction:column;width:100%}.main__content-container{display:flex;flex-direction:column;min-height:100%;justify-content:space-between;flex:2}p,h1,h2,h3,h4,li,ol,ul{color:#333}main{width:100%}blockquote{border-left:0.3em solid rgba(55,55,55,0.4);margin-bottom:16px;padding:0 1em;color:#707070}blockquote p,blockquote h1,blockquote h2,blockquote h3,blockquote h4,blockquote li,blockquote ol,blockquote ul{color:inherit}.home-card__group{display:flex;margin:0px auto;width:80%}.home-card__conatiner{background-color:#eee;margin:10px 30px;padding:10px;border-radius:5px;width:30%}.home-card__icon{width:100px;height:100px;margin:auto;border-radius:100px}.home-card__title{margin:auto;text-align:center}.home-card__text{font-size:0.7rem;text-align:center}.service__features{margin:20px 0px;height:100vh;min-height:500px;max-height:800px;display:flex;flex-direction:column;justify-content:space-between}.service__features--split{margin:20px 0px;height:100vh;min-height:500px;max-height:800px;display:flex;flex-direction:column;justify-content:space-between;max-height:1300px}.service-card__group{margin:0px auto}.service-card__conatiner{margin:10px 0px;border-radius:5px;display:flex;width:80%;margin:0 auto}.line-border{width:80%;display:block;border-bottom:1px solid #cacaca;margin:auto}.service-card__icon{width:100px;height:100px;margin:auto;flex:2;border-radius:100px}.service-card__service-name{color:green;font-weight:600}.service-card__title{margin:auto}.service-card__text{margin-bottom:30px !important}.service-card__text-container{flex:2;margin:auto !important}.service-card__aciton-btn{margin:auto 0;padding:10px;display:block;font-weight:400;border:none;background-color:#000}.service__features{display:flex;flex-direction:column;align-items:center}.service__features-title{margin:10px auto !important}.service-card__icon-container{width:30%;margin:auto}.service-card__aciton-btn--inactive{margin:auto;padding:10px;display:block;font-weight:400;border:none;background-color:lightgrey;color:#000}.home__vision-container{display:flex;align-items:center;height:200px;justify-content:space-between}.home__vision-text-line{font-size:0.8rem;font-style:italic}.home__vision-intro-title{text-align:center}.home__vision-intro-tagline{font-size:0.9rem;margin:auto;display:block;text-align:center}.home__vision-aciton-btn{display:block;font-weight:400;margin:20px auto;padding:15px;border:none;background-color:black;color:#fff}.home__vision-aciton-btn:hover{background-color:lightgray}.home__vision-action-link{color:white !important}.page__container--split{width:50%;margin:auto;padding:50px 0;width:80%;height:100vh;min-height:500px;max-height:800px;max-height:1300px;height:90vh !important;display:flex;flex-direction:column;justify-content:space-around}.index-banner__container{width:100%;display:flex;flex-direction:column;font-family:"Segoe UI", Tahoma, Geneva, Verdana, sans-serif;height:100vh;min-height:500px;max-height:800px;flex-grow:1}.index-banner{margin:auto;width:80%;display:flex;justify-content:space-between}.index-banner__logo-container{margin:center;align-items:center;display:flex;width:500px}.index-banner__title{margin:auto;font-style:none}.index-banner__tagline{margin:auto}.index-banner__title-container{display:flex}.index-banner__logo{margin:auto;border-radius:20px}.index-banner__main-action-btn{display:block;display:block;font-weight:400;padding:15px;border:none;margin:20px 0;background-color:green}.index-banner__main-action-link{color:white !important}.index-banner__features-list{margin:20px}.index-banner__features{margin:10px 0}.home__features{display:flex;flex-direction:column;align-items:center}.home__features-title{margin:auto}.index__group-content .page__container{width:80%;height:100vh;min-height:500px;max-height:800px;height:90vh !important;display:flex;flex-direction:column;justify-content:space-around}.action-call__container{background:#1f5818;width:100%;padding:60px 0}.action-call__margin-container{display:flex;width:80%;margin:auto;align-items:center;justify-content:space-around}.action-call__prompt{color:white;font-weight:400;font-size:1.7rem}.action-call__button{display:block;display:block;font-weight:400;padding:15px;border:none;margin:20px 0;background-color:#fff}.action-call__button:hover{background-color:lightgray}.action-call_link{color:#000 !important}.action-call_link:hover{text-decoration:none !important}header{z-index:5;position:sticky;top:0;background-color:#fff}.nav__container{display:flex;flex-direction:row;box-sizing:border-box;width:100%;padding-top:5px;border-bottom:1px solid #d3d3d3}.nav__home-btn{font-weight:bold;margin:auto;margin-left:-10px}.nav__hamburger-menu{display:none}.nav__spacer--small{width:100px;margin:auto}.nav__spacer{flex:4;margin:auto}.nav__logo-container{display:inline-flex;text-decoration:none}.nav__logo-container:hover{color:#0056b3;text-decoration:underline}.nav__toggle{display:none}.nav__logo{display:inline-flex;margin:auto;padding:5px;width:40px}.nav__link-group{flex:1.5;list-style:none;display:flex;flex-direction:row;align-items:center;align-self:center;margin:auto;text-align:center}.nav__link-group--small{flex:1.5;list-style:none;display:flex;flex-direction:row;align-items:center;align-self:center;margin:auto;text-align:center;flex:0.5;margin-right:10px}.nav__link-container{display:flex;padding:10px;height:100%;margin:auto}.nav__link-container--action{display:flex;padding:10px;height:100%;margin:auto;background-color:green;padding:15px}.nav__link-container--action .nav__link{color:white !important}.nav__link{text-decoration:none;color:black !important;font-weight:600;font-size:14px}.nav__link:hover{color:#0056b3;text-decoration:underline}footer{display:block;color:#333;font-size:0.7rem;padding:0;margin:0}.footer__container{width:100%;padding:0;justify-content:space-between;margin:auto;display:flex;flex-direction:row;overflow:hidden}.footer__column{list-style:none;display:flex;margin:auto 50px;align-items:center;flex:2.5}.footer__column--center{list-style:none;display:flex;margin:auto 50px;align-items:center;flex:2.5;margin:auto;flex-direction:column;align-items:center;flex:2}.footer__column:last-child{justify-content:flex-end}.footer__column:last-child a{margin:10px}.footer__link-container{margin:5px}.footer__link{text-decoration:none}.license__link{display:inline}.license__link:hover{color:#0056b3;text-decoration:underline}.footer__column-divider,.footer__column-divider--mobile-visible,.footer__column-divider--mobile-only{font-weight:500;opacity:0.7;margin:0 5px}.footer__column-divider--mobile-only{display:none}.footer__icon{margin:auto 5px;height:20px}.page__container{width:50%;margin:auto;padding:50px 0}.page__group{display:flex;flex-direction:column}.page__group-title{margin:20px auto}.page__group-content{display:flex;flex-direction:column}.page__group-content img{max-width:100%;display:block}.page__group-content video{max-width:100%;display:block}.page__group-content li{margin-left:40px}.page__group-content a:hover{color:#0056b3;text-decoration:underline}.page__group-content code{word-wrap:break-word;overflow-wrap:break-word}.page__group-content table{border-collapse:collapse;caption-side:bottom;border-color:#e9ecef;text-align:center;width:100%}.page__group-content table>thead{vertical-align:bottom;border-bottom:1px solid #cdc8ca;text-align:center}.page__group-content table th{text-align:center}.page__group-content table td{margin:auto;padding:10px;border-bottom:1px solid #edddd1}.page__group-content p,.page__group-content h2,.page__group-content h3{margin:10px 0}.page__group-content pre{padding:10px 10px 10px 20px;border-radius:8px;font-size:0.95rem;overflow:auto}.page__group-content pre{font-family:monospace, monospace;font-display:auto;font-size:1em}.page__preview-banner{width:10%;height:min(250px, 50vh);margin:20px auto}.page__banner{width:100%;height:max(450px, 50vh);margin:20px auto}.blog__content img{max-width:100%;display:block}.blog__content video{max-width:100%;display:block}.blog__content li{margin-left:40px}.blog__content a:hover{color:#0056b3;text-decoration:underline}.blog__content code{word-wrap:break-word;overflow-wrap:break-word}.blog__content table{border-collapse:collapse;caption-side:bottom;border-color:#e9ecef;text-align:center;width:100%}.blog__content table>thead{vertical-align:bottom;border-bottom:1px solid #cdc8ca;text-align:center}.blog__content table th{text-align:center}.blog__content table td{margin:auto;padding:10px;border-bottom:1px solid #edddd1}.blog__content p,.blog__content h2,.blog__content h3{margin:10px 0}.blog__content pre{padding:10px 10px 10px 20px;border-radius:8px;font-size:0.95rem;overflow:auto}.blog__content pre{font-family:monospace, monospace;font-display:auto;font-size:1em}.blog__content p{margin:30px 0}.blog__container{margin:auto;max-width:50%}.blog__list{list-style:none}.blog__post-link,.blog__post-link:visited{text-decoration:none;color:inherit}.blog__title{margin:35px 0}.blog__post-link{display:block}.blog__post-item{border-bottom:1px dashed #333;margin:10px;padding:10px}.blog__post-item:hover{background-color:lightgray}.blog__post-item:last-child{border-bottom:none}.blog__post-description{font-size:0.9rem;margin:5px 0}.blog__post-tag{font-size:0.7rem;font-family:monospace, monospace}.blog__post-tag:hover{color:#0056b3;text-decoration:underline}.blog__post-meta{font-size:0.7rem}.blog__post-title{font-size:1.4rem;font-weight:550}.blog__post-tag-container{margin:0}.tag__item-link,.tag__item-link:visited{text-decoration:none}.tag__item-link{display:flex;align-items:start;flex-direction:column;flex:2}.tag__item{border-bottom:1px dashed #333;margin:10px;display:flex;justify-content:space-between;padding:5px}.tag__item-title{font-size:1.4rem}.tag__meta{font-size:0.7rem}.tag__rss-link{margin:auto 20px}.tag__title{display:inline;flex:2}.tag__title-container{margin:35px 0;display:flex}.tag__rss-link--single{margin:auto}.clinic__doctors-container{display:flex}.doctor__profile_photo{width:100px;height:100px;border-radius:100px}.doctor__container{background-color:#eee;margin:10px 30px;padding:10px;height:250px;border-radius:5px;width:30%;display:flex;flex-direction:column;align-items:center;justify-content:space-around}.doctor__name{text-align:center;margin:0 auto !important}.doctor_rating-stars,.doctor_rating-value{margin:0 auto !important;text-align:center}.zola-anchor{margin-left:5px}.anchor-icon{color:inherit !important} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/mobile.css b/mobile.css new file mode 100644 index 0000000..12a03a5 --- /dev/null +++ b/mobile.css @@ -0,0 +1 @@ +.home-card__group{flex-direction:column}.home-card__conatiner{margin:10px auto;width:80%}.home-card__group{margin:auto}.home__vision-container{flex-direction:column;height:auto !important;min-height:auto !important;max-height:auto !important}.service-card__conatiner{width:85%;flex-direction:column-reverse;margin:50px auto}.service__features--split,.service__features{height:auto !important;min-height:auto !important;max-height:none !important;flex-direction:column}.line-border{width:95%}.home__container{max-height:100vh;height:100vh}.home__name{font-size:2rem}.index-banner{margin:auto}.index-banner__title{font-size:2.5rem;margin:auto}.index__group-content .page__container{width:90%}.index-banner__logo-container{display:none}.action-call__margin-container{flex-direction:column;width:85%}.action-call__prompt{text-align:center}.nav__container{flex-direction:column}.nav__header{display:flex;flex-direction:row;min-width:100%;justify-content:space-between}.nav__link-group,.nav__link-group--small{position:sticky;flex-direction:column;margin:auto;align-items:center;width:100%}.nav__link-container--action{background-color:#fff}.nav__link-container--action .nav__link{color:#000 !important}.nav__link-container{border-bottom:1px dashed rgba(55,55,55,0.4);width:70%}.nav__link-container--action{border-bottom:1px dashed rgba(55,55,55,0.4);width:70%}.nav__link-container:last-child{border-bottom:none}.nav__link{margin:auto}.nav__hamburger-menu{display:inline-block;width:50px;height:50px}.nav__spacer{display:none}.nav__link-group{margin-right:auto}.nav__toggle:not(:checked)~.nav__link-group,.nav__link-group--small{max-height:0;transition:max-height 0.4s ease-out;overflow:hidden}.nav__toggle:checked~.nav__link-group,.nav__toggle:checked~.nav__link-group--small{max-height:500px;transition:max-height 0.4s ease-out}.nav__toggle:checked~.nav__header .nav__hamburger-inner::after{width:24px;bottom:1.3px;transform:rotate(-90deg);transition:bottom 0.1s ease-out,transform 0.22s cubic-bezier(0.215, 0.61, 0.355, 1) 0.12s,width 0.1s ease-out}.nav__toggle:checked~.nav__header .nav__hamburger-inner::before{top:0;opacity:0;transition:top 0.1s ease-out, opacity 0.1s ease-out 0.12s}.nav__toggle:checked~.nav__header .nav__hamburger-inner{transform:rotate(225deg);transition-delay:0.12s;transition-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}.nav__hamburger-inner::after{bottom:-7px;transition:bottom 0.1s ease-in 0.25s,transform 0.22s cubic-bezier(0.55, 0.055, 0.675, 0.19),width 0.1s ease-in 0.25s}.nav__hamburger-inner::after,.nav__hamburger-inner::before{content:"";display:block}.nav__hamburger-inner::before{top:-7px;transition:top 0.1s ease-in 0.25s, opacity 0.1s ease-in}.nav__hamburger-inner{top:50%;margin:auto;transition-duration:0.22s;transition-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}.nav__hamburger-inner,.nav__hamburger-inner::after,.nav__hamburger-inner::before{width:24px;height:1.3px;position:relative;background:#000}.nav__hamburger-menu,.nav__hamburger-inner{display:block}footer{font-size:.44rem}.footer__container{display:grid;grid-template-rows:repeat(3, 100%);align-items:center;margin:auto;justify-content:center}.footer__link{font-size:0.5rem}.license__conatiner,.license__link{text-align:center}.footer__column:first-child{grid-row-start:3;flex-direction:row}.footer__column:last-child{grid-row-start:2}.footer__column{margin:0 auto;display:flex;padding:0;align-self:flex-end}.footer__column--center{margin:0 auto;display:flex;padding:0;align-self:flex-start}.footer__column-divider--mobile-only{margin:0 3px;font-size:9.9px}.page__container{width:85%}.page__group-content table{overflow-x:scroll}.page__group-content table td{padding:5px}.page__group-content pre{white-space:pre-wrap;word-wrap:break-word}.page__group-content li{margin-left:25px}.page__group-content p,.page__group-content h1,.page__group-content h2,.page__group-content h3{margin:20px 0px}.page__banner{height:auto}.page__group-title{margin:auto;margin-top:0px;margin-bottom:10px}.page__container--split{width:85%;height:auto !important;min-height:auto !important;max-height:none !important}.blog__container{max-width:95%}.blog__content table{overflow-x:scroll}.blog__content table td{padding:5px}.blog__content pre{white-space:pre-wrap;word-wrap:break-word}.blog__content li{margin-left:25px}.blog__content p,.blog__content h1,.blog__content h2,.blog__content h3{margin:20px 0px}.tag__title-container{flex-direction:column}.tag__rss-link--icon{margin:auto 0px}.clinic__doctors-container{display:flex;flex-direction:column;align-items:center}.doctor__container{width:80%}header{height:auto} diff --git a/ms-icon-144x144.png b/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6af1b7663ea3cfa8b235aa1d3d7158993ecd10 GIT binary patch literal 1578 zcmZ{kdpy)x6u_@X9+mK+OhVIQlZ~0tZ!_~FGvkpFqw%IC#+Vn4@fZjK#N&Z2qF~OWGWee>a0}@^c9GXW>DOz0K|U_KvD_-^T<}x7yvO? z049O}fKLOU6On(z%^ESt2Rl33gHNehof1S-7C2EIlwT^UtTb4g_Ez*K01ACh_GHhv zep!DY#luZcc_!gx&&y6B;qpOW?-pA8xO(B@%}}@6c#|Sx3JvX7jCvm$DlAh@Z%M_L zo0*K?TD{e@tgO?*`BZt1#>YwFEdR{)@u?=>-oVc2?j5n08yqAUoAE^hqLtOa%=}0j zdX)|bBmqSes_thG_?DJ+1&9_=O4rxy%H(vk1bJY7useS zkYWEX^Lf2nLifMsXvJ zS2M2&#-=P6+KhW(+t@=!g(o7e`z$oIHrr`QNR4Mxh&CHw`<50FK6``csqa&6DMi|T z*m`|et0?&A_AC#LJ-OA635j(TI}MDy@7`?k_D(F}y`rpZNrE=}TGxnAdg_@Zq}05V z7aG)&k4_$vOY~1q=yv_dO}+Ip&4oSWAxY9>Jvo4vdXUwNu;|=?kaRuHuOhj^Rc{_n z<;JZxxps>vHtQj)Q$6&Jv>uR~UwrB>46?H0ghkRd3DUQdUP|0M(tPu%_l~L)BJ1hi#9+aEq5BFw1Y`953^p^W>#f*3a+E`TZ^t3CfiJBL$<$3h`H^WHN!ify*T1w zHJo)uR$M+hV|R?`Q2*NhoA$qkB0J*sJCd{MK96UsMm)$<%@;EioZ2?XOpLy-s)@<= zS)(hAtjBJ9in{G4!Y>wOCOTYCwR4xw)eQIEq;A2b^^+riG$XJt!D~hFUGubyLK8GE zE~=?_yuVnz=ZXM-%zVDMMe}`uV0tStSsMMgk?mf}P?J6)>&o1YhzE~VSES>pQ?z$4 zQGMO7;!3Qb!9EV#g)ysMJ`x%hBzq(~uU$|`I=W!frW?2`gG{co`|^IzRsZQH__MA( z2FA`SEXu=`F+h~~2dvGgb=;0Oc}(J%(X<LUNGh%qmZ~+X{5HuR#N5h=8+%^i*tG`ajn%L#SLHQ*a=H2|k|+6A{iP)_A*q6^H7HPyn|bB0#up zcpScY7pen6)R)Ea;Knln*4Fk!ks>KI~22VbS+<8T{~Q z%)cea5b!vbWeCJ#5pZ-%h+!FQ31KaQA&3!d0YNMXZ;p7FBj<~o9Q=S}08S3B_La6l GqQ3zlFn^K& literal 0 HcmV?d00001 diff --git a/ms-icon-150x150.png b/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..7f615bd2ef0c3489f417b7d00955eb900ddd0c97 GIT binary patch literal 1653 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 literal 0 HcmV?d00001 diff --git a/ms-icon-70x70.png b/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..0054467ac7950d1c1b293593ceaf76533ef6c945 GIT binary patch literal 1039 zcmeAS@N?(olHy`uVBq!ia0vp^ZXnD7Bp5NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^> z;_2(k{)~l#OHQ=oThk{72FBfQ{x82Iloq}nA+ zuJ|Lo+i?G-r&B{i0voy})m*&)|NnArt%aT|w6vvSkK~CoTWII&MFqyngTQ8yamXUDxJV&;S2``_b-W z97liNpQ!TBFSXs<E zq=TJy)Lv!@*Qw%ieYBD=irdfrJNu~R^a+`R>1Xce_nYlfGL5M$ z?%&t4#if3q^?jYj2?-Zwmp*=+FLUhA%ts5)oorxY;r;WB@$5~(G`(XTN(Ys)Xa5uc zhV3Mkl$56d4QsZz$ZeQv=jtWp>*VL=^_;0J`Je6nX3o6*ET{GyRw{h{kN?fF02a4i zNz=3|GalyfFoYFxuX(zOEf^THswJ)wB`Jv|saDBFsX&Us$iT=**T6*Az#_!Zz{=Rb z%FsgFz`)ADz*+uFAc}_E{FKbJO57TZoP6E_H7I~=D9%qSDNig)WymNgDJZtm*U!vN zOiu;k%;apn{G#+d=Vj*t)k=WWhGdlHCRtgzxR3PX|# z4f142%gjjydR;#^uOufwT|X_cEHgPjuUH=uvGsCI&`H kCML;AMkXd{CKh@?9eP0bRlL6U8)yTAr>mdKI;Vst05W8QG5`Po literal 0 HcmV?d00001 diff --git a/nav/main.css b/nav/main.css new file mode 100644 index 0000000..1aa7759 --- /dev/null +++ b/nav/main.css @@ -0,0 +1 @@ +header{z-index:5;position:sticky;top:0;background-color:#fff}.nav__container{display:flex;flex-direction:row;box-sizing:border-box;width:100%;padding-top:5px;border-bottom:1px solid #d3d3d3}.nav__home-btn{font-weight:bold;margin:auto;margin-left:-10px}.nav__hamburger-menu{display:none}.nav__spacer--small{width:100px;margin:auto}.nav__spacer{flex:4;margin:auto}.nav__logo-container{display:inline-flex;text-decoration:none}.nav__logo-container:hover{color:#0056b3;text-decoration:underline}.nav__toggle{display:none}.nav__logo{display:inline-flex;margin:auto;padding:5px;width:40px}.nav__link-group{flex:1.5;list-style:none;display:flex;flex-direction:row;align-items:center;align-self:center;margin:auto;text-align:center}.nav__link-group--small{flex:1.5;list-style:none;display:flex;flex-direction:row;align-items:center;align-self:center;margin:auto;text-align:center;flex:0.5;margin-right:10px}.nav__link-container{display:flex;padding:10px;height:100%;margin:auto}.nav__link-container--action{display:flex;padding:10px;height:100%;margin:auto;background-color:green;padding:15px}.nav__link-container--action .nav__link{color:white !important}.nav__link{text-decoration:none;color:black !important;font-weight:600;font-size:14px}.nav__link:hover{color:#0056b3;text-decoration:underline} diff --git a/nav/mobile.css b/nav/mobile.css new file mode 100644 index 0000000..62edbda --- /dev/null +++ b/nav/mobile.css @@ -0,0 +1 @@ +.nav__container{flex-direction:column}.nav__header{display:flex;flex-direction:row;min-width:100%;justify-content:space-between}.nav__link-group,.nav__link-group--small{position:sticky;flex-direction:column;margin:auto;align-items:center;width:100%}.nav__link-container--action{background-color:#fff}.nav__link-container--action .nav__link{color:#000 !important}.nav__link-container{border-bottom:1px dashed rgba(55,55,55,0.4);width:70%}.nav__link-container--action{border-bottom:1px dashed rgba(55,55,55,0.4);width:70%}.nav__link-container:last-child{border-bottom:none}.nav__link{margin:auto}.nav__hamburger-menu{display:inline-block;width:50px;height:50px}.nav__spacer{display:none}.nav__link-group{margin-right:auto}.nav__toggle:not(:checked)~.nav__link-group,.nav__link-group--small{max-height:0;transition:max-height 0.4s ease-out;overflow:hidden}.nav__toggle:checked~.nav__link-group,.nav__toggle:checked~.nav__link-group--small{max-height:500px;transition:max-height 0.4s ease-out}.nav__toggle:checked~.nav__header .nav__hamburger-inner::after{width:24px;bottom:1.3px;transform:rotate(-90deg);transition:bottom 0.1s ease-out,transform 0.22s cubic-bezier(0.215, 0.61, 0.355, 1) 0.12s,width 0.1s ease-out}.nav__toggle:checked~.nav__header .nav__hamburger-inner::before{top:0;opacity:0;transition:top 0.1s ease-out, opacity 0.1s ease-out 0.12s}.nav__toggle:checked~.nav__header .nav__hamburger-inner{transform:rotate(225deg);transition-delay:0.12s;transition-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}.nav__hamburger-inner::after{bottom:-7px;transition:bottom 0.1s ease-in 0.25s,transform 0.22s cubic-bezier(0.55, 0.055, 0.675, 0.19),width 0.1s ease-in 0.25s}.nav__hamburger-inner::after,.nav__hamburger-inner::before{content:"";display:block}.nav__hamburger-inner::before{top:-7px;transition:top 0.1s ease-in 0.25s, opacity 0.1s ease-in}.nav__hamburger-inner{top:50%;margin:auto;transition-duration:0.22s;transition-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}.nav__hamburger-inner,.nav__hamburger-inner::after,.nav__hamburger-inner::before{width:24px;height:1.3px;position:relative;background:#000}.nav__hamburger-menu,.nav__hamburger-inner{display:block} diff --git a/page/main.css b/page/main.css new file mode 100644 index 0000000..e172bf9 --- /dev/null +++ b/page/main.css @@ -0,0 +1 @@ +.page__container{width:50%;margin:auto;padding:50px 0}.page__group{display:flex;flex-direction:column}.page__group-title{margin:20px auto}.page__group-content{display:flex;flex-direction:column}.page__group-content img{max-width:100%;display:block}.page__group-content video{max-width:100%;display:block}.page__group-content li{margin-left:40px}.page__group-content a:hover{color:#0056b3;text-decoration:underline}.page__group-content code{word-wrap:break-word;overflow-wrap:break-word}.page__group-content table{border-collapse:collapse;caption-side:bottom;border-color:#e9ecef;text-align:center;width:100%}.page__group-content table>thead{vertical-align:bottom;border-bottom:1px solid #cdc8ca;text-align:center}.page__group-content table th{text-align:center}.page__group-content table td{margin:auto;padding:10px;border-bottom:1px solid #edddd1}.page__group-content p,.page__group-content h2,.page__group-content h3{margin:10px 0}.page__group-content pre{padding:10px 10px 10px 20px;border-radius:8px;font-size:0.95rem;overflow:auto}.page__group-content pre{font-family:monospace, monospace;font-display:auto;font-size:1em}.page__preview-banner{width:10%;height:min(250px, 50vh);margin:20px auto}.page__banner{width:100%;height:max(450px, 50vh);margin:20px auto} diff --git a/page/mobile.css b/page/mobile.css new file mode 100644 index 0000000..94b5365 --- /dev/null +++ b/page/mobile.css @@ -0,0 +1 @@ +.page__container{width:85%}.page__group-content table{overflow-x:scroll}.page__group-content table td{padding:5px}.page__group-content pre{white-space:pre-wrap;word-wrap:break-word}.page__group-content li{margin-left:25px}.page__group-content p,.page__group-content h1,.page__group-content h2,.page__group-content h3{margin:20px 0px}.page__banner{height:auto}.page__group-title{margin:auto;margin-top:0px;margin-bottom:10px}.page__container--split{width:85%;height:auto !important;min-height:auto !important;max-height:none !important} diff --git a/people/dachary.png b/people/dachary.png new file mode 100644 index 0000000000000000000000000000000000000000..29e196c09cdeb520001f4f326a834ca40031c731 GIT binary patch literal 80169 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

r#4w~x*2;_oy7O-q2 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 P00000NkvXXu0mjfxf$zw literal 0 HcmV?d00001 diff --git a/people/easter-eggs.png b/people/easter-eggs.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7d68f39dccd8f8cbe883f9b333d6658a270c4c GIT binary patch literal 20562 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 literal 0 HcmV?d00001 diff --git a/people/realaravinth.jpg b/people/realaravinth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1163a9d85b0a5c453bebe8c1a119c6f3df12c708 GIT binary patch literal 89793 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

_9jMQ}A(m+E?)U-1+9e}Vi!J+gza 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 literal 0 HcmV?d00001 diff --git a/privacy-policy/index.html b/privacy-policy/index.html new file mode 100644 index 0000000..34fb262 --- /dev/null +++ b/privacy-policy/index.html @@ -0,0 +1,342 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Privacy | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + +
+ +
+
+ + +
+

Privacy

+
+

Who is we?# +

+

In the context of a horizontal community, the word we has a different meaning than within not-for-profit organizations or companies. We are the individuals who have access to the resources that would enable them to modify how it is implemented. For instance, someone with access to the configuration of the web server can change the log retention policy.

+

What information do we collect?# +

+

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 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.

+

What do we use your information for?# +

+

Any of the information we collect from you may be used in one of the following ways:

+
    +
  • To personalize your experience — your information helps us to better respond to your individual needs.
  • +
  • To send periodic emails — The email address you provide may be used to send you information, notifications that you request about changes to topics or in response to your user name, respond to inquiries, and/or other requests or questions.
  • +
+

How do we protect your information?# +

+

We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information.

+

What is your data retention policy?# +

+

We will make a good faith effort to:

+
    +
  • Retain server logs containing the IP address of all requests to this server no more than 15 days.
  • +
  • Retain the IP addresses associated with registered users and their posts no more than 15 days.
  • +
+

What about my data?# +

+

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
  • +
+

Do we use cookies?# +

+

Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the sites to recognize your browser and, if you have a registered account, associate it with your registered account.

+

We use cookies to understand and save your preferences for future visits and compile aggregate data about site traffic and site interaction so that we can offer better site experiences and tools in the future. We do not contract with third-party service providers.

+

Do we disclose any information to outside parties?# +

+

We do not sell, trade, or otherwise transfer to outside parties any information.

+ +

By using our sites, you consent to our sites privacy policy.

+

Changes to our Privacy Policy# +

+

If we decide to change our privacy policy, we will post those changes on this page.

+ +
+
+ + +
+ + +
+ + diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..c4f78d2 --- /dev/null +++ b/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +Allow: / +Sitemap: https://gna.org/sitemap.xml diff --git a/search_index.en.js b/search_index.en.js new file mode 100644 index 0000000..99456a0 --- /dev/null +++ b/search_index.en.js @@ -0,0 +1 @@ +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.449489742783178},"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":2,"m":{"docs":{},"df":0,"0":{"docs":{},"df":0,",":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1},"9":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}}},"1":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.8284271247461903},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":4.123105625617661}},"df":5,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"6":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":2.23606797749979}},"df":1,".":{"docs":{},"df":0,"6":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}},"6":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"5":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1},"8":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":2},"9":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2},"[":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}},"7":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.7320508075688772},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":6,".":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.6457513110645907}},"df":1}}}},"2":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":1}}}},"0":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":2,",":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}}},"0":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1,"0":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"1":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1}},"2":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":3,"8":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"4":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"5":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":1},"6":{"docs":{},"df":0,"4":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":1},"5":{"docs":{"https://gna.org/blog/zombies/":{"tf":2.0}},"df":1},"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}}},"9":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"6":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772}},"df":1}}},"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"2":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.0}},"df":4,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"7":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772}},"df":1}}}},"5":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":1},"g":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"9":{"docs":{},"df":0,",":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}}},"3":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}}}}},"4":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}},"4":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1,"3":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}},"6":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"7":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1}}}}},"8":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}}}}}},"9":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"4":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1},"9":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":5}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0}},"df":3}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":3}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":2.0},"https://gna.org/tos/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":2.0}},"df":2}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}}}}},"d":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":2.8284271247461903}},"df":2}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.6457513110645907},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.0},"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":5,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":5}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":4}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"z":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":1}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":6}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":2}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951}},"df":1}}}},"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951}},"df":2}}}}}},"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":3.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"i":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":4,"c":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":3}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.0}},"df":1}}}},"g":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":4}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":2.23606797749979},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":6},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2},"k":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":3}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.6457513110645907}},"df":3,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":8}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":5}}}},"w":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"y":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":4}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":4}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/about/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.8284271247461903},"https://gna.org/tos/":{"tf":2.449489742783178}},"df":3}}}},"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":8},"h":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2,"c":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":3}}}},"d":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":4}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.7320508075688772}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":4}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":3}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2,"\\":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":4}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":1}}}},"g":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}},"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":2}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies-part-2/":{"tf":2.0}},"df":5},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/legalese/":{"tf":1.0}},"df":3},"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178}},"df":1}}}},"c":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":2.6457513110645907}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":3}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1},"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":3,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":5}},"u":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":4}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3},"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":2.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":2.23606797749979},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":2.23606797749979}},"df":6}},"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":6.4031242374328485},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.23606797749979}},"df":4}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":2.449489742783178},"https://gna.org/blog/zombies/":{"tf":2.23606797749979}},"df":2,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":2}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://gna.org/about/":{"tf":1.4142135623730951},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":3,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":1,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":4}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/coc/":{"tf":1.0}},"df":4,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":2.6457513110645907}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":2.23606797749979},"https://gna.org/coc/":{"tf":2.8284271247461903},"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":5}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/service-wip/":{"tf":1.0}},"df":2},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":2.6457513110645907}},"df":4,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":2}},"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.6457513110645907},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":2.0},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":6}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":3}},"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1},"x":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1}}},"c":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.0}},"df":1,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.7320508075688772},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":8}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":1}},"q":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.7320508075688772}},"df":1}},"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1,"@":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":3}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":6}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":2.23606797749979}},"df":6}},"x":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/legalese/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/service-wip/":{"tf":1.0}},"df":1},"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/privacy-policy/":{"tf":2.0}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":5},"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/legalese/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.0}},"df":2}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/experimental/":{"tf":3.3166247903554},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178},"https://gna.org/blog/zombies-part-2/":{"tf":2.23606797749979},"https://gna.org/blog/zombies/":{"tf":2.6457513110645907},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":11,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.7320508075688772},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.605551275463989}},"df":5}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772}},"df":1}}},"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2,"'":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"é":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":3},"y":{"docs":{},"df":0,"'":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/legalese/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.449489742783178},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":2.449489742783178},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.1622776601683795},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":2.23606797749979},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":10,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951}},"df":2,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.449489742783178}},"df":2}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.8284271247461903}},"df":2}},"y":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":4}},"b":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":2},"e":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":2.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":7},"s":{"docs":{"https://gna.org/coc/":{"tf":1.7320508075688772}},"df":1,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":2.449489742783178},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772},"https://gna.org/tos/":{"tf":1.0}},"df":6}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":4}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":3}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":2.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":2}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":2}},"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/about/":{"tf":1.4142135623730951},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979}},"df":3}}}}}},"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.23606797749979}},"df":1,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":4}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":2.6457513110645907},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":5}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":3,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":2.23606797749979},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.449489742783178}},"df":5}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772}},"df":1}},"g":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":2.0}},"df":1,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/legalese/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0}},"df":1}}},"v":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":4}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":3.3166247903554},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.449489742783178},"https://gna.org/blog/zombies/":{"tf":3.1622776601683795}},"df":5}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":5.0},"https://gna.org/gitea-clinic/":{"tf":2.23606797749979}},"df":5,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0}},"df":3}}}}}},"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"’":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":5},"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}}}},"x":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}},"u":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979}},"df":1}}}}},"é":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":3,".":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":6}},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":3}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":3}}}}},"g":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":4}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":2}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.7320508075688772}},"df":2}}}}}},"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":5}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":5}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":2,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":4}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":2}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":10,"t":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2,"u":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":2}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.6457513110645907}},"df":6}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1},"s":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":3.0},"https://gna.org/blog/zombies/":{"tf":2.6457513110645907}},"df":2,"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.6457513110645907}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178},"https://gna.org/tos/":{"tf":1.0}},"df":4}},"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":5}},"n":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":4,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":1}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/about/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"t":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2},"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":5,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1},"s":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.6457513110645907}},"df":2}}},"e":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":2.0}},"df":2}}},"w":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":5}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0}},"df":5}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":2.6457513110645907},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.23606797749979},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":4.69041575982343},"https://gna.org/blog/path-not-found/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":7}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2},"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}},"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2},"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.23606797749979},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.8284271247461903},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.0},"https://gna.org/blog/zombies-part-2/":{"tf":2.0}},"df":7}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"t":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":4}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":9}}}},"o":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":3}},"g":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":4,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"m":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":2}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.449489742783178},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.4142135623730951}},"df":6}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0}},"df":4}},"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/tos/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":4.898979485566356},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":5,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1,"(":{"docs":{},"df":0,"8":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":2}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":4.58257569495584},"https://gna.org/blog/zombies-part-2/":{"tf":3.0},"https://gna.org/blog/zombies/":{"tf":3.4641016151377544},"https://gna.org/legalese/":{"tf":1.0}},"df":9,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.23606797749979}},"df":2}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/about/":{"tf":2.23606797749979},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":2.8284271247461903},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.0},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":4.69041575982343},"https://gna.org/blog/experimental/":{"tf":2.8284271247461903},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":6.082762530298219},"https://gna.org/blog/path-not-found/":{"tf":3.605551275463989},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.605551275463989},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":3.7416573867739413},"https://gna.org/blog/zombies-part-2/":{"tf":3.3166247903554},"https://gna.org/blog/zombies/":{"tf":5.291502622129181},"https://gna.org/gitea-clinic/":{"tf":1.7320508075688772},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":14,"'":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1},"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}}}}}}}}}},"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"=":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.23606797749979},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/about/":{"tf":2.23606797749979},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/experimental/":{"tf":2.8284271247461903},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/coc/":{"tf":2.8284271247461903},"https://gna.org/gitea-clinic/":{"tf":2.0},"https://gna.org/legalese/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/service-wip/":{"tf":1.0},"https://gna.org/tos/":{"tf":3.0}},"df":11},"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}}}}},"o":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.0}},"df":3}},"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":5}},"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":1}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}},"w":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":2,";":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0}},"df":4}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}},"d":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":3},"p":{"docs":{"https://gna.org/about/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.6457513110645907},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.449489742783178},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":2.0},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":8}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":4}}},"i":{"docs":{"https://gna.org/service-wip/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"i":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":2.23606797749979},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":3.605551275463989}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":2.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/about/":{"tf":1.7320508075688772},"https://gna.org/blog/experimental/":{"tf":2.23606797749979},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":4.795831523312719},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":2.449489742783178},"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":6}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"'":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":1,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":1}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":5,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":3}}}}}}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":4}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":5}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":2.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":8}}}}},"i":{"docs":{"https://gna.org/legalese/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":5}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.7320508075688772},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":7}}},"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/experimental/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":2},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":2}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":6}}}}}},"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":3.3166247903554}},"df":6}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":4}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772}},"df":2}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.7320508075688772},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":7},"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/about/":{"tf":1.7320508075688772},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/experimental/":{"tf":2.449489742783178},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.872983346207417},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":12}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":5}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/legalese/":{"tf":1.4142135623730951}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/service-wip/":{"tf":1.0}},"df":4}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":3},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":1}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":4,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.0}},"df":6}}}}},"p":{"docs":{"https://gna.org/privacy-policy/":{"tf":2.0}},"df":1},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":7}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":3}}}},"’":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"j":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772}},"df":1,"7":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772}},"df":1},"3":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1},"6":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":1},"7":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1,"@":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1}}}}}}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/service-wip/":{"tf":1.0}},"df":3}},"k":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":5}},"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":2}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":2.23606797749979},"https://gna.org/blog/zombies/":{"tf":3.0}},"df":2,"(":{"docs":{},"df":0,"2":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.23606797749979},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":5,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":2}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":3},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":2}}}},"w":{"docs":{"https://gna.org/legalese/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":4}}},"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"'":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/legalese/":{"tf":2.0}},"df":1}},"l":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":2}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":2}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":2}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":2.0}},"df":2}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2},"k":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/legalese/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":3}},"k":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979}},"df":1}},"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":6,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"@":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979},"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":5},"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2},"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.23606797749979},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.4142135623730951}},"df":4},"t":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"ï":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":4}}},"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":2}}}},"d":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":1},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":6}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.6457513110645907},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":5}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/tos/":{"tf":1.0}},"df":3}},"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":2,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":2}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.7320508075688772},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":6}}}},"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979}},"df":2}}},"y":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":5,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/legalese/":{"tf":1.4142135623730951}},"df":5}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":3,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":3}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":2}},"i":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":4}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.3166247903554},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":8}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.6457513110645907},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3}}},"v":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":1}}},"q":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":1}}}}},"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"a":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":4}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/about/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.7416573867739413},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":10}},"g":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3}}},"w":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":2}}}},"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1},"h":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"w":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}}}},"o":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1,"b":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}}}},"k":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":4.242640687119285}},"df":3},"l":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.6457513110645907}},"df":1}},"n":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":10,"c":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3},"g":{"docs":{},"df":0,"o":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":4.69041575982343}},"df":2}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1}}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":2.6457513110645907},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":5,"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":5}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":2.449489742783178}},"df":3}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/coc/":{"tf":2.449489742783178}},"df":3,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":3}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.8284271247461903},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":9,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":3}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.23606797749979}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2,"a":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":2.0}},"df":1}}}},"g":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":4}},"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":2,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.7320508075688772},"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":1}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":2}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3}},"h":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":2.8284271247461903},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.6457513110645907},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":3.0},"https://gna.org/blog/path-not-found/":{"tf":3.1622776601683795},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":5,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":2.23606797749979},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":2.449489742783178}},"df":7,"e":{"docs":{},"df":0,"'":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3}},"t":{"docs":{"https://gna.org/legalese/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/coc/":{"tf":2.0},"https://gna.org/privacy-policy/":{"tf":1.7320508075688772},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":4}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}}}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":2.23606797749979},"https://gna.org/blog/zombies/":{"tf":2.23606797749979}},"df":2},"e":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":5}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":2.23606797749979}},"df":2}},"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0}},"df":6}}}},"t":{"docs":{"https://gna.org/blog/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":7}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1,",":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,",":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,",":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":1}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/privacy-policy/":{"tf":2.0},"https://gna.org/tos/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":3}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":3.7416573867739413},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.23606797749979},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":10}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":3.0},"https://gna.org/blog/zombies/":{"tf":4.242640687119285},"https://gna.org/coc/":{"tf":1.0}},"df":4}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":4}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":3}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/service-wip/":{"tf":1.4142135623730951}},"df":3}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.7320508075688772},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":3.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.4641016151377544},"https://gna.org/coc/":{"tf":2.449489742783178}},"df":5}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/legalese/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"2":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.872983346207417},"https://gna.org/legalese/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":2.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":7}}}}},"s":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/tos/":{"tf":1.7320508075688772}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/tos/":{"tf":2.23606797749979}},"df":6}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":2}},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":2.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":3}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"1":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.0}},"df":1},"2":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0}},"df":2}},"d":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"z":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.449489742783178}},"df":1}}}}},"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":3}},"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":3}}}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/privacy-policy/":{"tf":2.6457513110645907}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.7320508075688772},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":4}}},"i":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":4,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/coc/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":2.449489742783178},"https://gna.org/blog/zombies/":{"tf":2.0}},"df":2},"v":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0}},"df":2}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":4}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.449489742783178},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.449489742783178},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":8}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":3}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":2.0},"https://gna.org/tos/":{"tf":2.23606797749979}},"df":3}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":7}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":5}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/tos/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":3}}}},"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":2.23606797749979},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":2.23606797749979},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.23606797749979},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":7,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}},"@":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}}}}}}}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":3}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":3.7416573867739413},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":4.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.23606797749979},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":2.8284271247461903},"https://gna.org/tos/":{"tf":1.0}},"df":12}}},"s":{"docs":{},"df":0,"6":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.23606797749979}},"df":1},"p":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":2}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.449489742783178},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":6}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0}},"df":4,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1},"n":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.6457513110645907}},"df":3},"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":4},"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":2,"s":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":2.23606797749979}},"df":4}},"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":7.280109889280518},"https://gna.org/legalese/":{"tf":2.8284271247461903},"https://gna.org/privacy-policy/":{"tf":2.23606797749979},"https://gna.org/service-wip/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":7}}}},"t":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":6,"u":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/coc/":{"tf":1.7320508075688772}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":5}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":6}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":3.1622776601683795}},"df":3},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1},"z":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/zombies/":{"tf":5.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}}},"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":6.082762530298219},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":2.23606797749979}},"df":7}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":3}},"v":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":5}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":4}},"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":4}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":4}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":1}},"w":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951}},"df":2}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2}},"f":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}},"q":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":2.0}},"df":1}},"f":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":4}},"t":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}},"u":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":2}},"y":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":4}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}},"f":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":2,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.4142135623730951}},"df":10}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":3}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.7320508075688772},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":4}},"s":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.4641016151377544},"https://gna.org/legalese/":{"tf":1.0}},"df":3}}}}}},"y":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":5}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951}},"df":1},"k":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":2.23606797749979}},"df":3,"n":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/experimental/":{"tf":2.6457513110645907},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.0}},"df":4}}}}},"e":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":2,"é":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0}},"df":6}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/service-wip/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"'":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":4}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":3}}}}},"y":{"docs":{},"df":0,"’":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1},"k":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":5}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":2,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.7320508075688772}},"df":8,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772}},"df":1}}}}},"p":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0}},"df":1},"t":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":2},"l":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":2.0},"https://gna.org/tos/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":2}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0}},"df":1}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":2}}}}}},"i":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.7320508075688772},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":6,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":2}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":4}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"o":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":3}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.0}},"df":2},"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":4}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":2}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":3}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":1}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":2}}}}}},"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":3}},"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.8284271247461903},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":4,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.7320508075688772},"https://gna.org/blog/zombies/":{"tf":2.23606797749979},"https://gna.org/tos/":{"tf":1.0}},"df":7}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":3.1622776601683795},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.0}},"df":9}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":2,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"=":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":2}}}}}}},"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1},"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":2.0},"https://gna.org/blog/path-not-found/":{"tf":1.7320508075688772},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.1622776601683795},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":2.0},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/legalese/":{"tf":2.0},"https://gna.org/privacy-policy/":{"tf":2.449489742783178},"https://gna.org/tos/":{"tf":2.0}},"df":11,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.7320508075688772},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0},"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.449489742783178},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":3.3166247903554},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.8284271247461903},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":2.0},"https://gna.org/coc/":{"tf":1.7320508075688772},"https://gna.org/privacy-policy/":{"tf":2.0},"https://gna.org/tos/":{"tf":2.449489742783178}},"df":11,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"6":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":2.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0}},"df":1}}},"u":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.6457513110645907},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":7,"f":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":4}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.449489742783178},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":3.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":2.6457513110645907},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":6}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/tos/":{"tf":1.7320508075688772}},"df":4,"b":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":2.449489742783178}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":2.449489742783178}},"df":3},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/legalese/":{"tf":2.449489742783178}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}}}}}}}},"y":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.449489742783178},"https://gna.org/blog/zombies-part-2/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.4142135623730951},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":7}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"b":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":2.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.4142135623730951}},"df":4,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.7320508075688772}},"df":1}}}},"e":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.7320508075688772}},"df":2}}},"l":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0}},"df":6}},"’":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/about/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.4142135623730951}},"df":2}},"l":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":6}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.4142135623730951},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":6}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/about/":{"tf":1.0},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0}},"df":3}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":3,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951}},"df":1}}}}}},"k":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.4142135623730951},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.4142135623730951},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.0},"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":2.23606797749979},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/coc/":{"tf":3.1622776601683795},"https://gna.org/gitea-clinic/":{"tf":1.0},"https://gna.org/service-wip/":{"tf":1.4142135623730951}},"df":13,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":2.23606797749979},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":3}}}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/coc/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.4142135623730951}},"df":3}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/legalese/":{"tf":1.4142135623730951},"https://gna.org/privacy-policy/":{"tf":1.0}},"df":4}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.4142135623730951},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.4142135623730951},"https://gna.org/coc/":{"tf":1.0}},"df":4}}}}},"x":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":2.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":4}}}},"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":2.0},"https://gna.org/blog/zombies/":{"tf":3.3166247903554}},"df":2}}}}}}},"title":{"root":{"docs":{},"df":0,"1":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1},"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"[":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}},"7":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}},"2":{"docs":{"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":1},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}},"i":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/coc/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/zombies/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":2}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0},"https://gna.org/gitea-clinic/":{"tf":1.0}},"df":8}}}},"n":{"docs":{},"df":0,"a":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0},"https://gna.org/blog/experimental/":{"tf":1.0}},"df":2}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/experimental/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"tf":1.0}},"df":1,"t":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/legalese/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/1-17-breaking-episode-1/":{"tf":1.0},"https://gna.org/blog/1-17-breaking-episode-2/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/privacy-policy/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gna.org/service-wip/":{"tf":1.0}},"df":1}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"tf":1.0},"https://gna.org/service-wip/":{"tf":1.0},"https://gna.org/tos/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://gna.org/blog/blank-or-error-500-page-after-login/":{"tf":1.0},"https://gna.org/blog/path-not-found/":{"tf":1.0},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0},"https://gna.org/blog/zombies-part-2/":{"tf":1.0}},"df":4}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://gna.org/tos/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://gna.org/blog/path-not-found/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://gna.org/service-wip/":{"tf":1.0}},"df":1}}}},"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://gna.org/blog/zombies-part-2/":{"tf":1.0},"https://gna.org/blog/zombies/":{"tf":1.0}},"df":2}}}}}}}},"documentStore":{"save":true,"docs":{"https://gna.org/":{"body":"","id":"https://gna.org/","title":""},"https://gna.org/about/":{"body":"Gna! provides dedicated managed Gitea hosting, including Woodpecker CI. Security updates are applied as soon as they are available and carefully tested. Each Gitea instance is monitored 24/7 and has backups.\n\n \n\nYou 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.\nIf you are into trouble and need assistance with a Gitea instance not hosted at Gna!, you can ask for help at the Gna! clinic. The doctors have developped a unique expertise and are well equiped to help you recover and upgrade.\n\nDo you already have an expertise running Gitea? You are welcome to join the Gna! collective, get in touch in the forum or the chat.\n","id":"https://gna.org/about/","title":"About"},"https://gna.org/blog/":{"body":"","id":"https://gna.org/blog/","title":"Posts"},"https://gna.org/blog/1-17-breaking-episode-1/":{"body":"Before version 1.17, when Gitea needed to change the git configuration, it modified the $HOME/.gitconfig file. For instance it would set core.quotePath to false:\n[core]\n\tquotePath = false\n\nWhen installing Gitea from docker or rootless or even from binary this $HOME/.gitconfig file belongs to a user that is dedicated to Gitea and not used by anyone else.\nHowever, 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:\n[user]\n\tname = Jane Doe\n\temail = jane@doe.com\n\nIt 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:\n\nFigure out the directory where $HOME/.gitconfig must be moved by running the doctor:\n\n$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor \n[1] Check paths and basic configuration\n - [I] Configuration File Path: \"/data/gitea/conf/app.ini\"\n - [I] Repository Root Path: \"/data/git/repositories\"\n - [I] Data Root Path: \"/data/gitea\"\n - [I] Custom File Root Path: \"/data/gitea\"\n - [I] Work directory: \"/app/gitea\"\n - [I] Log Root Path: \"/data/gitea/log\"\nOK\n\n\nCopy the $HOME/.gitconfig file to the Repository Root Path (which is /data/git/repositories in the example above).\n\nThe reason why this breaking change was introduced is to workaround a rare problem impacting Gitea installations relying on networked volumes.\n","id":"https://gna.org/blog/1-17-breaking-episode-1/","title":"1.17 breaking changes episode 1: preserving a custom gitconfig"},"https://gna.org/blog/1-17-breaking-episode-2/":{"body":"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. This change impacted a large number of Gitea installations because the docker image tag latest was set to 1.17.0-rc1 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.\nUnfortunately 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 to fix it requires moving the gitconfig file and was released July 19th, 2022 in 1.17.0-rc2.\nThis 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.\nIn 1.17.0-rc2, a custom .gitconfig must be moved manually to the new git home directory as follows:\n\nFigure out the directory where $HOME/.gitconfig must be moved by running the doctor:\n\n$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor \n[1] Check paths and basic configuration\n - [I] Configuration File Path: \"/data/gitea/conf/app.ini\"\n - [I] Repository Root Path: \"/data/git/repositories\"\n - [I] Data Root Path: \"/data/gitea\"\n - [I] Custom File Root Path: \"/data/gitea\"\n - [I] Work directory: \"/app/gitea\"\n - [I] Log Root Path: \"/data/gitea/log\"\nOK\n\n\nCopy the $HOME/.gitconfig file to the Data Root Path/home (which is /data/gitea/home in the example above).\n\n","id":"https://gna.org/blog/1-17-breaking-episode-2/","title":"1.17 breaking changes episode 2: preserving a custom gitconfig"},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"body":"Introducing Hostea, a project Loïc\nDachary and Aravinth\nManivannan are working on to create a full Free\nsoftware development suite based on\nGitea for the forge, Woodpecker\nCI for CI/CD,\nPages for static sites and\nGitPad for gists.\nThis talk introduces the projects goals and philosophy behind the\nproject.\nPlease see\nhere\nto learn more about the event.\nDetails#\n\n\norganised by: forgefriends.org\ndate: 2022th April, 2022\nvenue: Online\n\nResources#\n\n\nslides(ODP)\nslides(PDF)\n\n","id":"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/","title":"Introducing Gna!"},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"body":"The instructions to upgrade a Gitea instance 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.\nAn inventory of the known upgrade issues was started to figure out how to structure such a section in the documentation. The release notes were analyzed all the way back to Gitea 1.9.6 and the work is still in progress. Here is a sample of the tips that will be included:\n\nUpgrade directly to the latest Gitea version, there is no need to upgrade to intermediate versions.\nIf 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.\netc.\n\nHowever, even with the best documentation, someone will eventually run into an new problem and fixing it without compromising the integrity of the data will be challenging. This is best demonstrated by a real world example that was concluded a few days ago.\nGetting help from the community#\n\nAfter upgrading a Gitea intsance from 1.9.6 to 1.16.5 the tests conducted manually did not uncover any problem. However, after going to production, some users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser. The person in charge of the upgrade never had to diagnose Gitea problem and reached out in the Gitea forum.\n\nTip: explain the problem in a public forum as early as possible to get help from the community\n\nIn their post in the forum they explained how they attempted to diagnose the problem and how why they thought that only users created a few years ago were impacted. It was a detailed analysis that was concluded with a partial copy of the logs. It was unfortunately missing key information that was provided only three days later. In the meantime, as they could not figure out the source of the problem, they were on the verge of accepting the loss of all the Gitea database and start over from the repositories. However, once all the details were available, a workaround was suggested in the forum.\n\nTip: focus more on providing detailed facts than exposing the attempted diagnostic\n\nThere was hope to fix Gitea and in the following days they applied the workaround. They also tried to improve it but without success and eventually accepted a partial data loss as inevitable and reported their success back to the forum.\n\nTip: when getting support from the community, providing feedback is the best token of appreciation\n\nGetting professional help#\n\nThe Gna! 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 as volunteers. They can also be hired to resolve the more complicated cases.\nThe 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 but although well received, it was not accepted.\nWhen the Gitea admin explained how they chose to resolve the problem on the forum, it confirmed the workaround was viable and the root problem was identified. That was enough to figure out a fix for the underlying bug with a rather simple patch that was merged and backported in the following days. But it happened too late to avoid the data loss.\nTo summarize with a timeline, here is what happened:\n\nJ+1: The problem is discovered by users who see a blank page after login and a the Gitea admin tries to diagnose the problem\nJ+2: A message is sent to ask for help in the community\nJ+2 to J+6: Three people in the community suggest ideas but the Gitea admin cannot figure out the root cause and is on the verge of accepting the loss of all Gitea data and restart from the git repositories\nJ+6: A workaround is suggested by the community\nJ+7 to J+17: The Gitea admin applies the workaround and only looses part of the Gitea data\n\nAnd in retrospect, here is what could have happened instead:\n\nJ+1: The problem is discovered by users who see a blank page after login\nJ+1: The Gitea admin reaches out to someone at the Gna! Clinic\nJ+2: The logs of the Gitea instance are analyzed, the root cause diagnosed and a patch is created to fix it.\nJ+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. The Gitea admin runs the patched Gitea binary in the meantime. There is no data loss.\n\nIt does not mean all upgrade problems can be resolved so easily. But it shows, with an example, that in some cases it makes sense to get professional help.\n","id":"https://gna.org/blog/blank-or-error-500-page-after-login/","title":"[solved] blank or error 500 page after login"},"https://gna.org/blog/experimental/":{"body":"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 within minutes and pay for it on a monthly basis with a credit card. It includes a dedicated CI based on Woodpecker. 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.\n\n \n\nThe service is 100% infrastructure as code, published as Ansible playbooks within Enough. It can be self-hosted on bare metal (with libvirt) or in the cloud (with OpenStack): follow the quick start, configure playbooks for hostea and the dashboard.\nThe organization supporting Gna! is a horizontal collective of individuals and organizations. The revenue sharing model 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.\nThe origin#\n\nIn February 2022 the project of running a dedicated Gitea hosting service was proposed to the Gitea project and other organizations and plans were drafted. After a month of discussions it turned out to not be a good match for any of them.\nIt 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.\nA technical stack with no users#\n\nThe 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.\nIt 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.\nTo keep the madness contained and enjoyable, it was decided to set a deadline to July 1st and to define precise and realistic technical goals. 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.\nA horizontal collective with a revenue sharing model#\n\nAnother 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. It feels like a contradiction for a project committed to decentralization to be governed by a centralized organization.\nThe 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 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.\nIt 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.\nDedicated to forge federation#\n\nIn 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, 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.\n","id":"https://gna.org/blog/experimental/","title":"Get a Gitea instance with CI at Gna!"},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"body":"While helping people with their upgrades in the Gitea forum or at the Gna! clinic, I realized that few Gitea admins know about the gitea doctor command and decided to write this blog post as a gentle introduction.\nAn apple a day keeps the doctor away#\n\nOr in our case, Gitea versions below 1.11.5. 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 and Gitea 1.10.6 and may be of help if you run this particular version and are facing the problem that motivated the backport.\nWith each version gitea doctor improves and gains new capabilities. For instance, in Gitea 1.17 it becomes aware of orphaned pull requests and is able to fix them. If such a problem exists in Gitea 1.16, it does not know about it.\nCalling the doctor#\n\nIn the following, examples are based on a Gitea 1.16.8 instance you can run as follows:\n$ docker run --name gitea -p 3000:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless\n$ docker exec gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com\n$ docker exec gitea mkdir /var/lib/gitea/data/log\n\nAnd then you can go to the web interface to create a test repository, with an initial README.md file. When this is done the doctor can be called as follows:\n$ docker exec gitea gitea doctor --all\n[1] Check paths and basic configuration\n - [I] Configuration File Path: \"/etc/gitea/app.ini\"\n - [I] Repository Root Path: \"/var/lib/gitea/git/repositories\"\n - [I] Data Root Path: \"/var/lib/gitea\"\n - [I] Custom File Root Path: \"/var/lib/gitea/custom\"\n - [I] Work directory: \"/var/lib/gitea\"\n - [I] Log Root Path: \"/var/lib/gitea/data/log\"\nOK\n[2] Check if there is garbage storage files\nOK\n[3] Check Database Version\nOK\n[4] Check consistency of database\nOK\n[5] Check if user with wrong type exist\nOK\n[6] Check if OpenSSH authorized_keys file is up-to-date\nOK\n[7] Check if SCRIPT_TYPE is available\n - [I] ScriptType bash is on the current PATH at /bin/bash\nOK\n[8] Check if hook files are up-to-date and executable\nOK\n[9] Recalculate Stars number for all user\nOK\n[10] Check old archives\n - [I] 0 old archives in repository need to be deleted\nOK\n[11] Enable push options\n - [I] Checked 1 repositories, 0 need updates.\nOK\n[12] Check for incorrectly dumped repo_units (See #16961)\n - [W] Found 0 broken repo_units\nOK\n[13] Recalculate merge bases\n - [W] 0 PRs with incorrect mergebases of 0 PRs total in 1 repos\nOK\n[14] Check git-daemon-export-ok files\n - [I] Checked 1 repositories, 0 need updates.\n\nWhat does the doctor know?#\n\nAlthough the doctor can be compared to fsck(8), 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.\nThe 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:\n$ docker exec gitea gitea doctor --list\nDefault\tName\t\t\t\tTitle\n*\tpaths\t\t\t\tCheck paths and basic configuration\n\tstorages\t\t\tCheck if there is garbage storage files\n*\tcheck-db-version\t\tCheck Database Version\n\tcheck-db-consistency\t\tCheck consistency of database\n*\tcheck-user-type\t\t\tCheck if user with wrong type exist\n*\tauthorized-keys\t\t\tCheck if OpenSSH authorized_keys file is up-to-date\n\tscript-type\t\t\tCheck if SCRIPT_TYPE is available\n\thooks\t\t\t\tCheck if hook files are up-to-date and executable\n\trecalculate-stars-number\tRecalculate Stars number for all user\n\tcheck-old-archives\t\tCheck old archives\n\tenable-push-options\t\tEnable push options\n\tfix-broken-repo-units\t\tCheck for incorrectly dumped repo_units (See #16961)\n\trecalculate-merge-bases\t\tRecalculate merge bases\n\tcheck-git-daemon-export-ok\tCheck git-daemon-export-ok files\n\nAnd then call the check that looks interesting:\n$ docker exec gitea gitea doctor --run authorized-keys\n[1] Check if OpenSSH authorized_keys file is up-to-date\nOK\n\nThe challenge is to figure out which check does what and at the moment the best source of information is ... the sources themselves. The doctor.go command is the entry point and the doctor directory contains the rest.\nSome checks are straightforward to understand, even if you do not know Go, such as the authorized-keys check. Others are much more involved and your best chance is to ask the Gitea chatroom for help.\nIs it going to hurt?#\n\nBy 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 in a more recent version of the doctor.\nNow let's do something bad: remove the permissions from a hook in our repository:\n$ docker exec gitea chmod -x /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive\n\nRun the doctor with the check supposed to find that out:\n$ docker exec gitea gitea doctor --run hooks\n[1] Check if hook files are up-to-date and executable\n - [W] old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable\n\nAsk it to fix this with the --fix flag:\n$ docker exec gitea gitea doctor --run hooks --fix\n[1] Check if hook files are up-to-date and executable\n - [W] Regenerated hooks for root/test\n - [W] old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable\n\nAnd run it one last time to check all is well:\n$ docker exec gitea gitea doctor --run hooks\n[1] Check if hook files are up-to-date and executable\nOK\n\nEven 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.\nGoing further#\n\nIf that was helpful to you, I would very much appreciate if you send me a message on Mastodon. It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could send a pull request to improve the doctor and help it mature.\n","id":"https://gna.org/blog/gentle-introduction-to-the-doctor/","title":"[tutorial] A gentle introduction to the gitea doctor"},"https://gna.org/blog/path-not-found/":{"body":"In Gitea 1.15 the app.example.ini file was changed to comment out most of the values. The assumption was that all values exactly matched the defaults in the source code. However, there are differences, for instance for APP_DATA_PATH. Before Gitea 1.15, app.example.ini contained:\nAPP_DATA_PATH = data\n\nand 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:\n; APP_DATA_PATH = data\n\nand the path was relative to the work path directory, as provided either via the --work-path argument or the GITEA_WORK_DIR environment variable. \nWhen a distribution such as voidlinux uses app.example.ini as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea fails with errors 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. But this changed when Gitea 1.15.6 was packaged and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the Gitea 1.16.8 package.\nThe APP_DATA_PATH directory is not the only one, the [log] ROOT_PATH is another example. There is an ongoing effort 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:\nAPP_DATA_PATH = data\n\nand:\n; APP_DATA_PATH = data\n\nwill 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.\nIn 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.\n","id":"https://gna.org/blog/path-not-found/","title":"[solved] Gitea 1.15 and up: path not found or permission denied"},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"body":"This post was originally published on Loïc Dachary's\nblog.\n\nWhen an organization asks me about Gitea, I would like to direct them to\na provider where they can rent an instance and just use it, in the same\nway they can go to https://discourse.org for a forum, or\nhttps://nextcloud.com for storage. Instead of waiting for that to\nhappen, Aravinth and\nmyself decided to do something about it, in a\nway that is in line with our shared values: transparency and Free\nSoftware.\nAfter doing some research we found counter examples that showed the\npitfalls to avoid. GitLab because its business model heavily relies on\nselling proprietary licenses. CiviCRM because setting it up is complex\nand requires training: users can't figure it out on their own. Gitea\nimages provided by Digital Ocean because they do not include security\nupgrades. MySQL configured and run by AWS because of the vendor lock-in\nthat makes it impossible to self-host.\nWe concluded that an online service such as Gitea can be hosted in a\nsustainable way as long as:\n\nIt is well maintained and upgrades itself\nIt can be self-hosted\nThe service can automatically be restored from backups when the\nunderlying resources fail\n\nGitHub and GitLab make it look like there is a market around software\nforges. It is however impossible to figure out if this market exists\nonly because it is based on proprietary software. How many of these\ncustomers would pay for a Free Software hosted Gitea instance?\nEven if these customers do exist, a new service provider would have to\nfigure out how to convince them to subscribe. The technical development\nof the service can be done within weeks but building a sustainable\nbusiness takes much longer. Again, there were examples of what can go\nwrong, for instance ElasticSearch. After years of work developing a\nsuccessful online service and a customer base, AWS entered the\ncompetition and started to take it away from them.\nThe sustainability of the Free Software ecosystem is a new and very\ndifficult problem to solve. It is discussed more than it ever was in the\nwake of security breaches originating from widely used and yet abandoned\nlibrary or disillusioned Free Software authors self-sabotaging their\nnext release, and everyone has diverging opinions. It falls on each Free\nSoftware author to spend time to think about their own projects because\nthere are no handbook or good examples to follow. That is what Aravinth\nand myself did to find a semblance of clarity and decide how to go about\nthis hosted Gitea service idea.\nSustaining Free Software online services#\n\nMore mature online services mean less opportunities to sell services#\n\nIdeally the software running an online service is rock solid and bugs\nare so rare that it can run unattended. This is true of\nhttps://wordpress.org and it is not uncommon for an instance to run for\nyears while upgrading themselves to get security patches. The cost of\nmaintaining such a service is negligible and hosting companies can offer\nit for free to their customers. They make their profit by renting the\nmachines on which the service runs.\nWhen the software is not as mature, it is more expensive to run. Bugs\nneed fixing, upgrades require manual intervention, users must be trained\nto overcome the complexity of the user experience, etc. Well known\nexamples are Discourse or CiviCRM for which companies sell services to\novercome these issues.\nBut when an organization is both the author of the software and the\nprovider of paid services to compensate for its lack of maturity, it\ncreates a conflict of interest. Should they focus their effort on making\nthe software more mature, they would harm a business model that is based\non this very lack of maturity. For instance, if the author of a software\nalso sells training courses, they are not motivated to solve user\nexperience issues. If they did, it would lower the need for training\ncourses and reduce their income.\nFree Software online services in the wake of the sustainability#\n\ncrisis\nNowadays all Free Software authors struggle to get enough resources to\nproduce a steady stream of releases, even when the project is very\npopular. This sustainability problem is getting more and more attention\nas the number of Free Software projects in use world wide keeps growing.\nEven the simplest online service relies on thousands of Free Software\nprojects, each of which needs work to keep going. Accidents caused by\npoorly maintained Free Software projects become more frequent.\nThis Free Software sustainability crisis is barely emerging and very\nmuch resembles ecological problems such as climate change. In both cases\nit is very difficult to figure out how to properly care for the\nresources that are consumed. After decades of advocacy, it is generally\naccepted that fossil energy won't last forever but there still is a long\nway to go. It will also take a long time for the Free Software community\nto answer this simple question: how to sustain an ever growing library\nof Free Software?\nLuckily, it is relatively simpler to solve that problem for an online\nservice because it has users. They can be reminded that their assistance\nis needed to keep the project afloat, for instance by a donation. A\nproposition that would be much more difficult to make for the author of\na cryptographic library. Convincing users to pay for an online service\nhas the best chance of success when the author of the software is also\nthe service provider. This is the business model of Discourse and\nWeblate, but it is relatively fragile because nothing stands in the way\nof the competition.\nA few years ago ElasticSearch successfully developed an online service\noffering. But when AWS entered the competition and was better at\nmarketing it, ElasticSearch quickly realized they would likely go out of\nbusiness. They tried to fight back by changing their\nlicense, which was the\nwrong answer to a real problem. Discourse or Weblate are also likely to\nface competition from hosting companies in the future and they may not\nsurvive it.\nIn the end, the durable source of income for a Free Software online\nservice is to rent the resources (CPU/RAM/network/disk) it needs to run.\nIn other words only hosting companies can make a profit when running\nsuch an online service. And for that reason they also need to share part\nof the profits to ensure the sustainability of the Free Software service\ntheir customers need.\nOnline services vendor lock-in is cured by Free Software#\n\nWhen hosting companies offer online services they also provide upgrades\nand transparent recovery when the hardware fails. But none of them allow\nthe service to be self-hosted. When their price policy change, or when\nthe term of services ban users from a given country, migrating the\nservice elsewhere it costly and difficult. For instance when AWS runs\nMySQL for their customers, they allow to download the data but not the\nsoftware that runs the proprietary AWS interface used to configure and\ncontrol the server. Another example is GitHub where the content of the\ngit repository can be downloaded but the code that runs GitHub itself is\nnot Free Software.\nIf a customer cannot run the same software as their service provider,\nthey are locked-in, even if they can download their data. It is a common\nmisconception to think that there is no vendor lock-in as long as it is\npossible to download the data in an standard format. Migrating the data\nfrom one software to another is, more often than not, time consuming and\ncostly to a point that it is effectively a blocker. A GitHub salesperson\nwould argue that it is possible for people to run GitHub Enterprise on\ntheir own hardware. But the vendor lock-in is still present via the\nproprietary license contract. The user experience, maintenance and\nupgrades are still exclusively controlled by GitHub.\nTo guarantee their independence, the customers of an online service need\nto be able to:\n\nDownload their data\nRun the exact same Free Software as their service provider\nRun the exact same Free Software infrastructure as code as their\nservice provider\n\nThe requirement regarding Free Software infrastructure as code refers\nto, for instance, the AWS control panel and all that is behind it when\ncreating a new MySQL service. It includes whatever a competitor would\nneed to run the same online service. An example would be\nhttps://enough.community, an infrastructure as code dedicated to\ncreating the services needed by whistleblowers and human rights\ndefenders. It consumes resources rented by hosting providers, assembles\ndisks and machines, setup monitoring and intrusion detection, installs\nvarious online services and upgrades them.\nThe availability of the software that creates the infrastructure is not\nonly useful to the competitors of a service provider. It also benefits a\nnon-profit that wants to provide (for instance) Wordpress instances to\nits members. Without it they would need to create something from scratch\nusing building blocks such as CiviCRM. Even though such building blocks\nexist, this is a significant undertaking and effectively a blocker.\nFederated online services and durability#\n\nAll self-hosted services are in danger of losing the data they contain.\nWhen a Wordpress service is hosted in a home and the machine dies, it\nmust be restored from backups... when there are backups. Hosting\ncompanies ensure the durability of the data with their own backup\nsystem. It creates a dilemma for people who are looking into self\nhosting: independence is desirable, but is it worth taking the risk of\ndata loss?\nFederated online services do not suffer from this problem, because they\ncan mirror each other. A Gitea instance that is federated with another\nwill mirror copies of software projects found on its peers. Should one\ninstance be destroyed, mirrored projects can be resurrected from the\nfederated instance. Not only is it a practical way to ensure the (rare)\nfailure of an entire datacenter, it also helps with the (more frequent)\ndestruction of self-hosted machines. Contrary to backups that require\nspecial attention, the replication involved in federated online service\nis built in and works continuously. There is no need for an extra backup\nservice that is very rarely used and therefore likely to fail when\nneeded.\nFederated services are not yet mainstream and Gitea is one of the rare\nservices that started to implement the concept. In the interim,\ncustomers of an online hosting service will need to worry about backups\nto ensure the durability of their data. But the ultimate solution for\nthem won't be the emergence of an ideal backup infrastructure, it will\nbe replication (via federated services) that will continuously ensure\nthe durability of their data.\nPaths forward#\n\nThe Gitea project itself, following the footsteps of Discourse or\nWeblate, could provide a hosting service. Part of its current user base\nmay become customers and there does not seem to be any blocker to make\nthat happen. As with most successful Free Software project, people\nworking on Gitea daily are already very busy and cannot engage in such a\nlong term project. But Aravinth and myself can, if they will have us.\nAnother path forward would be to wrap Gitea into a bundle that existing\nhosting companies could easily use to provide such a service to their\ncustomers. The biggest hosting companies are unlikely to be interested:\nif Digital Ocean was to provide upgrades on top of their existing Gitea\nimage, they are more likely to rely on their internal staff to implement\nthat from scratch, as proprietary software integrated into their\nexisting infrastructure. But smaller hosting companies such as\nhttps://Octopuce.fr or https://Easter-Eggs.com, who already deploy Gitea\ninstances for their customers, would use it if, for instance, it helped\nwith the upgrades. They would then kindly be reminded to give back a\nshare of their profits in order to sustain the development of the\nservice they deploy.\nFinally it would also be possible to follow the example of GitLab in the\nearly days (before it turned to proprietary software) or Codeberg and\noffer a free shared forge hosting service to build a user base. After a\nfew years, a percentage of the user base would convert to being paid\ncustomers or donors to sustain the activity and part of the income would\nbe used to sustain the development of the service.\n","id":"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/","title":"Project plans for a hosted Gitea online service"},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"body":"April 12, 2022 version git v2.35.2 was released and addresses a security issue CVE-2022-24765. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as Debian GNU/Linux, Alpine.\nIf Gitea runs as user foo, calls a patched Git version and a parent directory of the git repositories is owned by a user other than foo, it will fail with a message such as:\nFailed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository ('/data/git/repositories/git/data.git' is owned by someone else)\n\nThis started to show in the past few weeks to users running the Gitea binary on Windows who also independently installed git v2.36. And then to people running Gitea from snap, on a Synology NAS and then people running from Gitea docker images which is based on Alpine.\nWorkarounds#\n\n\nIf using Gitea docker images:\n\nupgrade to Gitea >=1.16.9 or 1.17, both have git >=2.36\ngit config --global --replace-all safe.directory '*'\n\n\nIf the Gitea binary was installed independently of git, upgrade git to a version that is greater or equal to 2.36 and disable the security check entirely with:\n\nimpersonate the user dedicated to Gitea (usually git)\ngit config --global --replace-all safe.directory '*'\n\n\n\nBug fix#\n\nThe bug fix is for Gitea to ensure git config --global --replace-all safe.directory '*' is set on its dedicated user when it initializes. It is effective on the condition that the git CLI version is greater or equal to 2.36.\nBug fix rationale#\n\nIt is safe to disable the security check in Gitea. It is not vulnerable to CVE-2022-24765 because it calls the git CLI after changing its working directory to be the git repository targeted by the command (for instance diff) or a temporary directory. Therefore it will not explore the parent directories looking for a git configuration file.\nThe security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and not because a parent directory is owned by an unexpected user. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in CVE-2022-24765.\nIt 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.\nGitea runs under a dedicated user, either when installed from binary or from docker and modifies the global git configuration 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. 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.\n","id":"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/","title":"[solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else"},"https://gna.org/blog/zombies-part-2/":{"body":"Gitea can create 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.\n$ time git clone https://4.4.4.4\nClonage dans '4.4.4.4'...\nfatal: 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\n\nreal\t2m9,753s\nuser\t0m0,001s\nsys\t0m0,009s\n\nAs explained in the diagnostic blog post regarding Gitea zombies there fortunately is a very simple way to avoid this by making sure each Gitea child is a process group leader. That first step was introduced in Gitea 1.17 and backported to Gitea 1.16.9. The actual bug fix can now be implemented.\nUsing negative process id to kill children#\n\nWhen Gitea timeout on a child, it relies on os.Process.Kill 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:\n\nIf pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.\n\nWhich is implemented as follows in the Friendly Forge Format library:\n\nsyscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)\n\nNot using the default Go CommandContext#\n\nSince 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 does it:\n\tctxErr := watchCtx(ctx, cmd.Process.Pid)\n\terr = cmd.Wait()\n\tinterruptErr := <-ctxErr\n\t// If cmd.Wait returned an error, prefer that.\n\t// Otherwise, report any error from the interrupt goroutine.\n\tif interruptErr != nil && err == nil {\n\t\terr = interruptErr\n\t}\n\nTesting the bug is fixed and stays fixed#\n\nLong standing bugs that are difficult to reproduce manually such as this one require robust testing to ensure that:\n\nthe diagnostic identifying the root cause is correct\nthe bug fix works\nit does not resurface insidiously because of a subtle regression introduce years later\n\nIt is easy to implement as can be seen in the Friendly Forge Format library. In a nutshell:\n\ngit clone https://4.4.4.4 which will hang because of firewall rules\nwait for the git-remote-https grandchild process to be spawned\ncancel the context and wait for the goroutine to terminate\nverify the git-remote-https is killed\n\nAnd with that... no more zombies!\n","id":"https://gna.org/blog/zombies-part-2/","title":"[solved] Zombies created by Gitea"},"https://gna.org/blog/zombies/":{"body":"The first issue about zombie processes created by Gitea was reported in 2017 and resurfaced on a regular basis. 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:\n\nGitea updates a mirror by spawning the process git remote update\ngit remote update spawns yet another process, git fetch\ngit fetch is stuck, for instance because of network problems, and Gitea eventually times out\nGitea kill the process git remote update\nWhen killed git remote update does not kill its own child and git fetch becomes an orphaned process which keeps running\nWhen git fetch eventually completes it becomes a zombie because its original parent is no longer around to wait on it\n\nPID 1 process and waiting on orphans#\n\nThis 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 this is s6: they will both wait on orphaned processes and there won't be any zombies.\nWhat if Gitea is the only running process?#\n\nBut when Gitea runs from the rootless docker image, 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:\n$ docker run --name gitea -p 8080:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless\n$ docker exec --user 1000 gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com\n\nThe git command can then be replaced with a script that waits forever:\n$ ( echo -e '#!/bin/bash\\nsleep infinity' ) | docker exec -i --user root gitea tee /usr/bin/git\n$ docker exec --user root gitea chmod +x /usr/bin/git\n\nTrying to create a repository from the web interface will create the conditions for a zombie to show:\n$ docker exec gitea ps -o ppid,pid,comm,args \nPPID PID COMMAND COMMAND\n 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web\n 1 94 sleep [sleep]\n 1 99 sleep [sleep]\n 1 111 sleep [sleep]\n 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\n 164 165 sleep sleep infinity\n\nWhen the git process is killed by Gitea, the sleep child will be orphaned:\n$ docker exec gitea ps -o ppid,pid,comm,args \nPPID PID COMMAND COMMAND\n 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web\n 1 94 sleep [sleep]\n 1 99 sleep [sleep]\n 1 111 sleep [sleep]\n 1 165 sleep sleep infinity\n\nKilling it will turn it into a zombie:\n$ docker exec gitea kill 165\n$ docker exec gitea ps -o ppid,pid,comm,args \nPPID PID COMMAND COMMAND\n 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web\n 1 94 sleep [sleep]\n 1 99 sleep [sleep]\n 1 111 sleep [sleep]\n 1 165 sleep [sleep]\n\nKilling a child process and all its children#\n\nThere 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. In a nutshell it means that when the child is killed all its children and grand children are also killed.\n","id":"https://gna.org/blog/zombies/","title":"[diagnostic] Zombies created by Gitea"},"https://gna.org/coc/":{"body":"The Gna! collective strives to:#\n\n\nBe 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.\nBe 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.\nBe 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. It’s 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!.\nCollaborate 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.\nWhen 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 we’re 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 doesn’t mean that they’re wrong.\nFocus 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.\nWhen 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.\n\nWe take the following very seriously, and any violations may impact your ability to participate in Gna!#\n\n\nBe 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:\n\nViolent threats or language directed against another person.\nDiscriminatory jokes and language.\nPosting sexually suggestive, explicit or violent material.\nPosting (or threatening to post) other people's personally identifying information (\"doxing\").\nPersonal insults, especially those using racist or sexist terms.\nUnwelcome sexual attention.\nAdvocating for, or encouraging, any of the above behavior.\nRepeated harassment of others. In general, if someone asks you to stop, then stop.\n\n\nRespect 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.\n\n","id":"https://gna.org/coc/","title":"Code of Conduct"},"https://gna.org/gitea-clinic/":{"body":"How does it work?#\n\nYou can get help from the community on the Gna! forum or the Gitea forum: it is the best way to resolve simple issues. If you are in a hurry or the problem is serious you could:\n\nGet in touch with the doctor of your choice\nUpload your sick Gitea\nOnce it is repaired download it back home (or decide it deserves a permanent residence at Gna!)\nPay the doctor\n\nHow much does it cost?#\n\nAll 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.\nGna! Doctors#\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n\n \n\n \n \n \n\n \n \n \n\n \n \n Aravinth Manivannan\n \n ★★★★☆\n \n \n Get in touch\n \n\n \n \n \n \n \n \n\n \n\n \n \n \n\n \n \n \n\n \n \n Easter-eggs\n \n ★★★★★\n \n \n Get in touch\n \n\n \n \n \n \n \n \n\n \n\n \n \n \n\n \n \n \n\n \n \n Loïc Dachary\n \n ★★★★★\n \n \n Get in touch\n \n\n\n","id":"https://gna.org/gitea-clinic/","title":"Gitea Clinic"},"https://gna.org/legalese/":{"body":"Copyright#\n\nThe copyright of the software and content used to build the infrastructure is held by the individual contributors who implemented it, as found in the git history.\nIntellectual Property#\n\nDid You Say “Intellectual Property”? It's a Seductive Mirage\nDisclaimer of Warranty#\n\nThere is no warranty for the service, to the extent permitted by applicable law. Except when otherwise stated in writing the service is provided \"as is\" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.\nLimitation of Liability#\n\nIn 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.\nInterpretation of the Warranty and Liability disclaimers#\n\nIf 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.\nHosting#\n\nThe 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.\nFor details, see the documentation.\n","id":"https://gna.org/legalese/","title":"Legalese"},"https://gna.org/privacy-policy/":{"body":"Who is we?#\n\nIn the context of a horizontal community, the word we has a different meaning than within not-for-profit organizations or companies. We are the individuals who have access to the resources that would enable them to modify how it is implemented. For instance, someone with access to the configuration of the web server can change the log retention policy.\nWhat information do we collect?#\n\nWe 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.\nWhen 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.\nWhen 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.\nWhat do we use your information for?#\n\nAny of the information we collect from you may be used in one of the following ways:\n\nTo personalize your experience — your information helps us to better respond to your individual needs.\nTo send periodic emails — The email address you provide may be used to send you information, notifications that you request about changes to topics or in response to your user name, respond to inquiries, and/or other requests or questions.\n\nHow do we protect your information?#\n\nWe implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information.\nWhat is your data retention policy?#\n\nWe will make a good faith effort to:\n\nRetain server logs containing the IP address of all requests to this server no more than 15 days.\nRetain the IP addresses associated with registered users and their posts no more than 15 days.\n\nWhat about my data?#\n\nUsers of Hotea's services can ask contact@gna.org to:\n\nDelete their account on a service when it is not a feature available to the user (for instance Nextcloud)\nRetrieve data associated with their account on a service that does not already provide full access\n\nDo we use cookies?#\n\nYes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the sites to recognize your browser and, if you have a registered account, associate it with your registered account.\nWe use cookies to understand and save your preferences for future visits and compile aggregate data about site traffic and site interaction so that we can offer better site experiences and tools in the future. We do not contract with third-party service providers.\nDo we disclose any information to outside parties?#\n\nWe do not sell, trade, or otherwise transfer to outside parties any information.\nYour Consent#\n\nBy using our sites, you consent to our sites privacy policy.\nChanges to our Privacy Policy#\n\nIf we decide to change our privacy policy, we will post those changes on this page.\n","id":"https://gna.org/privacy-policy/","title":"Privacy"},"https://gna.org/service-wip/":{"body":"Thank you for your interest in Gna!, we are a work-in-progress. Come\nsay hi and join the conversion! :)\n","id":"https://gna.org/service-wip/","title":"Service Work in Progress"},"https://gna.org/tos/":{"body":"CHATONS Charter compliance#\n\nGna! is committed to comply with the CHATONS charter.\nAll applications and infrastructure software used in Gna! are published under a Free Software license.\nUser content#\n\nGna! has no copyright claim over content uploaded by its users.\nGna! 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.\nSupport#\n\nSupport requests should be filed as an issue in https://gitea.gna.org/Hostea/support/issues.\nPublicly available content published on Gitea instances#\n\nAll publicly available software published on the dedicated Gitea instances provided by Gna! must be published under a Free Software license.\nInfrastructure#\n\nGna! 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.\nSecurity#\n\nSecurity updates are applied via unattended upgrades.\nBackups#\n\nBackups are managed via the Enough backup playbook so that there exist at least one backup of each machine in a geographical location that is different from the one where it runs.\nDisaster recovery involves rebooting the machine that was lost using a backup, either within a libvirt hypervisor or an OpenStack tenant.\nGDPR compliance#\n\nA user can request deletion or anonymisation of the data they are unable to delete themselves by sending a request to contact@gna.org.\nA 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.\nEditorial responsibility#\n\nThe person responsible for the editorial content published on Gna! is Loïc Dachary, 12 bd Magenta, 75010 Paris.\nHuman contact#\n\nGna! users are kindly invited to get in touch with loic@dachary.org and organize a meeting in person to discuss the services provided.\n","id":"https://gna.org/tos/","title":"Terms of Service"}},"docInfo":{"https://gna.org/":{"body":0,"title":0},"https://gna.org/about/":{"body":77,"title":0},"https://gna.org/blog/":{"body":0,"title":1},"https://gna.org/blog/1-17-breaking-episode-1/":{"body":142,"title":8},"https://gna.org/blog/1-17-breaking-episode-2/":{"body":164,"title":8},"https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/":{"body":50,"title":2},"https://gna.org/blog/blank-or-error-500-page-after-login/":{"body":443,"title":6},"https://gna.org/blog/experimental/":{"body":395,"title":4},"https://gna.org/blog/gentle-introduction-to-the-doctor/":{"body":717,"title":5},"https://gna.org/blog/path-not-found/":{"body":187,"title":8},"https://gna.org/blog/project-plans-for-hosted-gitea-online-service/":{"body":1094,"title":6},"https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/":{"body":293,"title":9},"https://gna.org/blog/zombies-part-2/":{"body":286,"title":4},"https://gna.org/blog/zombies/":{"body":387,"title":4},"https://gna.org/coc/":{"body":401,"title":2},"https://gna.org/gitea-clinic/":{"body":69,"title":2},"https://gna.org/legalese/":{"body":151,"title":1},"https://gna.org/privacy-policy/":{"body":269,"title":1},"https://gna.org/service-wip/":{"body":9,"title":3},"https://gna.org/tos/":{"body":204,"title":2}},"length":20},"lang":"English"}; \ No newline at end of file diff --git a/service-wip/index.html b/service-wip/index.html new file mode 100644 index 0000000..9a5fcdc --- /dev/null +++ b/service-wip/index.html @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Service Work in Progress | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

Service Work in Progress

+
+

Thank you for your interest in Gna!, we are a work-in-progress. Come +say hi and join the conversion! :)

+ +
+
+ + +
+ + +
+ + diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..5b2c299 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,110 @@ + + + + https://gna.org/ + + + https://gna.org/about/ + + + https://gna.org/blog/ + + + https://gna.org/blog/1-17-breaking-episode-1/ + 2022-06-22 + + + https://gna.org/blog/1-17-breaking-episode-2/ + 2022-07-20 + + + https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/ + 2022-04-22 + + + https://gna.org/blog/blank-or-error-500-page-after-login/ + 2022-05-08 + + + https://gna.org/blog/experimental/ + 2022-07-10 + + + https://gna.org/blog/gentle-introduction-to-the-doctor/ + 2022-06-14 + + + https://gna.org/blog/path-not-found/ + 2022-05-28 + + + https://gna.org/blog/project-plans-for-hosted-gitea-online-service/ + 2022-04-18 + + + https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/ + 2022-05-15 + + + https://gna.org/blog/zombies-part-2/ + 2022-06-04 + + + https://gna.org/blog/zombies/ + 2022-06-02 + + + https://gna.org/coc/ + + + https://gna.org/gitea-clinic/ + + + https://gna.org/legalese/ + + + https://gna.org/privacy-policy/ + + + https://gna.org/service-wip/ + + + https://gna.org/tags/ + + + https://gna.org/tags/federation/ + + + https://gna.org/tags/forgefriends/ + + + https://gna.org/tags/free-software-sustainability/ + + + https://gna.org/tags/free-software/ + + + https://gna.org/tags/gitea/ + + + https://gna.org/tags/gna/ + + + https://gna.org/tags/hostea/ + + + https://gna.org/tags/problem/ + + + https://gna.org/tags/troubleshoot/ + + + https://gna.org/tags/tutorial/ + + + https://gna.org/tags/upgrade/ + + + https://gna.org/tos/ + + diff --git a/tag/main.css b/tag/main.css new file mode 100644 index 0000000..2ab4c32 --- /dev/null +++ b/tag/main.css @@ -0,0 +1 @@ +.tag__item-link,.tag__item-link:visited{text-decoration:none}.tag__item-link{display:flex;align-items:start;flex-direction:column;flex:2}.tag__item{border-bottom:1px dashed #333;margin:10px;display:flex;justify-content:space-between;padding:5px}.tag__item-title{font-size:1.4rem}.tag__meta{font-size:0.7rem}.tag__rss-link{margin:auto 20px}.tag__title{display:inline;flex:2}.tag__title-container{margin:35px 0;display:flex}.tag__rss-link--single{margin:auto} diff --git a/tag/mobile.css b/tag/mobile.css new file mode 100644 index 0000000..f1b4c0e --- /dev/null +++ b/tag/mobile.css @@ -0,0 +1 @@ +.tag__title-container{flex-direction:column}.tag__rss-link--icon{margin:auto 0px} diff --git a/tags/federation/atom.xml b/tags/federation/atom.xml new file mode 100644 index 0000000..d4fc89c --- /dev/null +++ b/tags/federation/atom.xml @@ -0,0 +1,48 @@ + + + - federation + + + Zola + 2022-07-10T00:00:00+00:00 + https://gna.org/tags/federation/atom.xml + + Get a Gitea instance with CI at Gna! + 2022-07-10T00:00:00+00:00 + 2022-07-10T00:00:00+00:00 + + https://gna.org/blog/experimental/ + <p>Hosting a Gitea instance on Gna! is now possible (but still experimental). It is meant to be a minimum viable product: anyone can <a href="https://hosteadashboard.gna.org">create a new dedicated Gitea instance</a> within minutes and pay for it on a monthly basis with a credit card. It includes a dedicated CI based on <a href="https://woodpecker-ci.org/">Woodpecker</a>. 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.</p> +<video width="600" controls> + <source src="https://cloud.forgefriends.org/s/xXLcYpsE469tJEj/download?path=&files=hostea-screencast-vm-create.mp4" type="video/mp4" /> +</video> +<p>The service is 100% infrastructure as code, published as <a href="https://lab.enough.community/main/infrastructure/-/tree/9e18ebbf675c8a65d1585d20b4cf6295af6e52ed/playbooks/hosteadashboard">Ansible playbooks within Enough</a>. It can be self-hosted on bare metal (with <a href="https://libvirt.org/">libvirt</a>) or in the cloud (with <a href="https://www.openstack.org/">OpenStack</a>): follow the <a href="https://enough-community.readthedocs.io/en/latest/introduction.html#quick-start">quick start</a>, configure playbooks for <a href="https://enough-community.readthedocs.io/en/latest/services/hostea.html">hostea</a> and <a href="https://enough-community.readthedocs.io/en/latest/services/hosteadashboard.html">the dashboard</a>.</p> +<p>The organization supporting Gna! is a <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a> of individuals and organizations. The <a href="https://forum.hostea.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<h3 id="the-origin">The origin<a class="zola-anchor" href="#the-origin" aria-label="Anchor link for: the-origin" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In February 2022 the project of running a dedicated Gitea hosting service was <a href="https://discourse.gitea.io/t/a-gitea-hosting-service-under-the-umbrella-of-the-gitea-project/4692">proposed to the Gitea project</a> and other organizations and <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">plans were drafted</a>. After a month of discussions it turned out to not be a <a href="https://blog.dachary.org/2022/03/11/the-inconclusive-story-of-four-failed-project-offers/">good match for any of them</a>.</p> +<p>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.</p> +<h3 id="a-technical-stack-with-no-users">A technical stack with no users<a class="zola-anchor" href="#a-technical-stack-with-no-users" aria-label="Anchor link for: a-technical-stack-with-no-users" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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.</p> +<p>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.</p> +<p>To keep the madness contained and enjoyable, it was decided to set a deadline to July 1st and to <a href="https://gitea.gna.org/Hostea/july-mvp/issues">define precise and realistic technical goals</a>. 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.</p> +<h3 id="a-horizontal-collective-with-a-revenue-sharing-model">A horizontal collective with a revenue sharing model<a class="zola-anchor" href="#a-horizontal-collective-with-a-revenue-sharing-model" aria-label="Anchor link for: a-horizontal-collective-with-a-revenue-sharing-model" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a>. It feels like a contradiction for a project committed to decentralization to be governed by a centralized organization.</p> +<p>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 <a href="https://forum.gna.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<p>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.</p> +<h3 id="dedicated-to-forge-federation">Dedicated to forge federation<a class="zola-anchor" href="#dedicated-to-forge-federation" aria-label="Anchor link for: dedicated-to-forge-federation" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/">forge federation</a>, 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.</p> + + + diff --git a/tags/federation/index.html b/tags/federation/index.html new file mode 100644 index 0000000..03c4fe1 --- /dev/null +++ b/tags/federation/index.html @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + federation | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + diff --git a/tags/forgefriends/atom.xml b/tags/forgefriends/atom.xml new file mode 100644 index 0000000..a92f1fa --- /dev/null +++ b/tags/forgefriends/atom.xml @@ -0,0 +1,86 @@ + + + - forgefriends + + + Zola + 2022-07-10T00:00:00+00:00 + https://gna.org/tags/forgefriends/atom.xml + + Get a Gitea instance with CI at Gna! + 2022-07-10T00:00:00+00:00 + 2022-07-10T00:00:00+00:00 + + https://gna.org/blog/experimental/ + <p>Hosting a Gitea instance on Gna! is now possible (but still experimental). It is meant to be a minimum viable product: anyone can <a href="https://hosteadashboard.gna.org">create a new dedicated Gitea instance</a> within minutes and pay for it on a monthly basis with a credit card. It includes a dedicated CI based on <a href="https://woodpecker-ci.org/">Woodpecker</a>. 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.</p> +<video width="600" controls> + <source src="https://cloud.forgefriends.org/s/xXLcYpsE469tJEj/download?path=&files=hostea-screencast-vm-create.mp4" type="video/mp4" /> +</video> +<p>The service is 100% infrastructure as code, published as <a href="https://lab.enough.community/main/infrastructure/-/tree/9e18ebbf675c8a65d1585d20b4cf6295af6e52ed/playbooks/hosteadashboard">Ansible playbooks within Enough</a>. It can be self-hosted on bare metal (with <a href="https://libvirt.org/">libvirt</a>) or in the cloud (with <a href="https://www.openstack.org/">OpenStack</a>): follow the <a href="https://enough-community.readthedocs.io/en/latest/introduction.html#quick-start">quick start</a>, configure playbooks for <a href="https://enough-community.readthedocs.io/en/latest/services/hostea.html">hostea</a> and <a href="https://enough-community.readthedocs.io/en/latest/services/hosteadashboard.html">the dashboard</a>.</p> +<p>The organization supporting Gna! is a <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a> of individuals and organizations. The <a href="https://forum.hostea.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<h3 id="the-origin">The origin<a class="zola-anchor" href="#the-origin" aria-label="Anchor link for: the-origin" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In February 2022 the project of running a dedicated Gitea hosting service was <a href="https://discourse.gitea.io/t/a-gitea-hosting-service-under-the-umbrella-of-the-gitea-project/4692">proposed to the Gitea project</a> and other organizations and <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">plans were drafted</a>. After a month of discussions it turned out to not be a <a href="https://blog.dachary.org/2022/03/11/the-inconclusive-story-of-four-failed-project-offers/">good match for any of them</a>.</p> +<p>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.</p> +<h3 id="a-technical-stack-with-no-users">A technical stack with no users<a class="zola-anchor" href="#a-technical-stack-with-no-users" aria-label="Anchor link for: a-technical-stack-with-no-users" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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.</p> +<p>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.</p> +<p>To keep the madness contained and enjoyable, it was decided to set a deadline to July 1st and to <a href="https://gitea.gna.org/Hostea/july-mvp/issues">define precise and realistic technical goals</a>. 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.</p> +<h3 id="a-horizontal-collective-with-a-revenue-sharing-model">A horizontal collective with a revenue sharing model<a class="zola-anchor" href="#a-horizontal-collective-with-a-revenue-sharing-model" aria-label="Anchor link for: a-horizontal-collective-with-a-revenue-sharing-model" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a>. It feels like a contradiction for a project committed to decentralization to be governed by a centralized organization.</p> +<p>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 <a href="https://forum.gna.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<p>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.</p> +<h3 id="dedicated-to-forge-federation">Dedicated to forge federation<a class="zola-anchor" href="#dedicated-to-forge-federation" aria-label="Anchor link for: dedicated-to-forge-federation" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/">forge federation</a>, 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.</p> + + + + Introducing Gna! + 2022-04-22T00:00:00+00:00 + 2022-04-22T00:00:00+00:00 + + https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/ + <p>Introducing <a href="https://gna.org">Hostea</a>, a project <a href="https://dachary.org">Loïc +Dachary</a> and <a href="https://batsense.net">Aravinth +Manivannan</a> are working on to create a full Free +software development suite based on +<a href="https://gitea.io">Gitea</a> for the forge, <a href="https://woodpecker-ci.org">Woodpecker +CI</a> for CI/CD, +<a href="https://github.com/realaravinth/pages">Pages</a> for static sites and +<a href="https://gitpad.org">GitPad</a> for gists.</p> +<p>This talk introduces the projects goals and philosophy behind the +project.</p> +<p>Please see +<a href="https://forum.forgefriends.org/t/forgefriends-monthly-update-april-22st-2022-5pm-6pm-utc-2/673">here</a> +to learn more about the event.</p> +<h2 id="details">Details<a class="zola-anchor" href="#details" aria-label="Anchor link for: details" + ><span class="anchor-icon">#</span></a +> +</h2> +<ul> +<li><strong>organised by:</strong> <a href="https://forgefriends.org">forgefriends.org</a></li> +<li><strong>date:</strong> 2022<sup>th</sup> April, 2022</li> +<li><strong>venue:</strong> Online</li> +</ul> +<h2 id="resources">Resources<a class="zola-anchor" href="#resources" aria-label="Anchor link for: resources" + ><span class="anchor-icon">#</span></a +> +</h2> +<ul> +<li><a href="./slides/2022-04-22-forgefriends-introducing-hostea.odp">slides(ODP)</a></li> +<li><a href="./slides/2022-04-22-forgefriends-introducing-hostea.pdf">slides(PDF)</a></li> +</ul> + + + diff --git a/tags/forgefriends/index.html b/tags/forgefriends/index.html new file mode 100644 index 0000000..7bfbf75 --- /dev/null +++ b/tags/forgefriends/index.html @@ -0,0 +1,336 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + forgefriends | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + diff --git a/tags/free-software-sustainability/atom.xml b/tags/free-software-sustainability/atom.xml new file mode 100644 index 0000000..b605cb9 --- /dev/null +++ b/tags/free-software-sustainability/atom.xml @@ -0,0 +1,238 @@ + + + - free-software-sustainability + + + Zola + 2022-04-18T00:00:00+00:00 + https://gna.org/tags/free-software-sustainability/atom.xml + + Project plans for a hosted Gitea online service + 2022-04-18T00:00:00+00:00 + 2022-04-18T00:00:00+00:00 + + https://gna.org/blog/project-plans-for-hosted-gitea-online-service/ + <p><em>This post was originally published on <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">Loïc Dachary's +blog</a>.</em></p> +<hr /> +<p>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, in the same +way they can go to https://discourse.org for a forum, or +https://nextcloud.com for storage. Instead of waiting for that to +happen, <a href="https://batsense.net/about/">Aravinth</a> and +<a href="https://dachary.org/">myself</a> decided to do something about it, in a +way that is in line with our shared values: transparency and Free +Software.</p> +<p>After doing some research we found counter examples that showed the +pitfalls to avoid. GitLab because its business model heavily relies on +selling proprietary licenses. CiviCRM because setting it up is complex +and requires training: users can't figure it out on their own. Gitea +images provided by Digital Ocean because they do not include security +upgrades. MySQL configured and run by AWS because of the vendor lock-in +that makes it impossible to self-host.</p> +<p>We concluded that an online service such as Gitea can be hosted in a +sustainable way as long as:</p> +<ul> +<li>It is well maintained and upgrades itself</li> +<li>It can be self-hosted</li> +<li>The service can automatically be restored from backups when the +underlying resources fail</li> +</ul> +<p>GitHub and GitLab make it look like there is a market around software +forges. It is however impossible to figure out if this market exists +only because it is based on proprietary software. How many of these +customers would pay for a Free Software hosted Gitea instance?</p> +<p>Even if these customers do exist, a new service provider would have to +figure out how to convince them to subscribe. The technical development +of the service can be done within weeks but building a sustainable +business takes much longer. Again, there were examples of what can go +wrong, for instance ElasticSearch. After years of work developing a +successful online service and a customer base, AWS entered the +competition and started to take it away from them.</p> +<p>The sustainability of the Free Software ecosystem is a new and very +difficult problem to solve. It is discussed more than it ever was in the +wake of security breaches originating from widely used and yet abandoned +library or disillusioned Free Software authors self-sabotaging their +next release, and everyone has diverging opinions. It falls on each Free +Software author to spend time to think about their own projects because +there are no handbook or good examples to follow. That is what Aravinth +and myself did to find a semblance of clarity and decide how to go about +this hosted Gitea service idea.</p> +<h1 id="sustaining-free-software-online-services">Sustaining Free Software online services<a class="zola-anchor" href="#sustaining-free-software-online-services" aria-label="Anchor link for: sustaining-free-software-online-services" + ><span class="anchor-icon">#</span></a +> +</h1> +<h2 id="more-mature-online-services-mean-less-opportunities-to-sell-services">More mature online services mean less opportunities to sell services<a class="zola-anchor" href="#more-mature-online-services-mean-less-opportunities-to-sell-services" aria-label="Anchor link for: more-mature-online-services-mean-less-opportunities-to-sell-services" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>Ideally the software running an online service is rock solid and bugs +are so rare that it can run unattended. This is true of +https://wordpress.org and it is not uncommon for an instance to run for +years while upgrading themselves to get security patches. The cost of +maintaining such a service is negligible and hosting companies can offer +it for free to their customers. They make their profit by renting the +machines on which the service runs.</p> +<p>When the software is not as mature, it is more expensive to run. Bugs +need fixing, upgrades require manual intervention, users must be trained +to overcome the complexity of the user experience, etc. Well known +examples are Discourse or CiviCRM for which companies sell services to +overcome these issues.</p> +<p>But when an organization is both the author of the software and the +provider of paid services to compensate for its lack of maturity, it +creates a conflict of interest. Should they focus their effort on making +the software more mature, they would harm a business model that is based +on this very lack of maturity. For instance, if the author of a software +also sells training courses, they are not motivated to solve user +experience issues. If they did, it would lower the need for training +courses and reduce their income.</p> +<h2 id="free-software-online-services-in-the-wake-of-the-sustainability">Free Software online services in the wake of the sustainability<a class="zola-anchor" href="#free-software-online-services-in-the-wake-of-the-sustainability" aria-label="Anchor link for: free-software-online-services-in-the-wake-of-the-sustainability" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>crisis</p> +<p>Nowadays all Free Software authors struggle to get enough resources to +produce a steady stream of releases, even when the project is very +popular. This sustainability problem is getting more and more attention +as the number of Free Software projects in use world wide keeps growing. +Even the simplest online service relies on thousands of Free Software +projects, each of which needs work to keep going. Accidents caused by +poorly maintained Free Software projects become more frequent.</p> +<p>This Free Software sustainability crisis is barely emerging and very +much resembles ecological problems such as climate change. In both cases +it is very difficult to figure out how to properly care for the +resources that are consumed. After decades of advocacy, it is generally +accepted that fossil energy won't last forever but there still is a long +way to go. It will also take a long time for the Free Software community +to answer this simple question: how to sustain an ever growing library +of Free Software?</p> +<p>Luckily, it is relatively simpler to solve that problem for an online +service because it has users. They can be reminded that their assistance +is needed to keep the project afloat, for instance by a donation. A +proposition that would be much more difficult to make for the author of +a cryptographic library. Convincing users to pay for an online service +has the best chance of success when the author of the software is also +the service provider. This is the business model of Discourse and +Weblate, but it is relatively fragile because nothing stands in the way +of the competition.</p> +<p>A few years ago ElasticSearch successfully developed an online service +offering. But when AWS entered the competition and was better at +marketing it, ElasticSearch quickly realized they would likely go out of +business. They tried to fight back by <a href="https://www.elastic.co/blog/licensing-change">changing their +license</a>, which was the +wrong answer to a real problem. Discourse or Weblate are also likely to +face competition from hosting companies in the future and they may not +survive it.</p> +<p>In the end, the durable source of income for a Free Software online +service is to rent the resources (CPU/RAM/network/disk) it needs to run. +In other words only hosting companies can make a profit when running +such an online service. And for that reason they also need to share part +of the profits to ensure the sustainability of the Free Software service +their customers need.</p> +<h1 id="online-services-vendor-lock-in-is-cured-by-free-software">Online services vendor lock-in is cured by Free Software<a class="zola-anchor" href="#online-services-vendor-lock-in-is-cured-by-free-software" aria-label="Anchor link for: online-services-vendor-lock-in-is-cured-by-free-software" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>When hosting companies offer online services they also provide upgrades +and transparent recovery when the hardware fails. But none of them allow +the service to be self-hosted. When their price policy change, or when +the term of services ban users from a given country, migrating the +service elsewhere it costly and difficult. For instance when AWS runs +MySQL for their customers, they allow to download the data but not the +software that runs the proprietary AWS interface used to configure and +control the server. Another example is GitHub where the content of the +git repository can be downloaded but the code that runs GitHub itself is +not Free Software.</p> +<p>If a customer cannot run the same software as their service provider, +they are locked-in, even if they can download their data. It is a common +misconception to think that there is no vendor lock-in as long as it is +possible to download the data in an standard format. Migrating the data +from one software to another is, more often than not, time consuming and +costly to a point that it is effectively a blocker. A GitHub salesperson +would argue that it is possible for people to run GitHub Enterprise on +their own hardware. But the vendor lock-in is still present via the +proprietary license contract. The user experience, maintenance and +upgrades are still exclusively controlled by GitHub.</p> +<p>To guarantee their independence, the customers of an online service need +to be able to:</p> +<ul> +<li>Download their data</li> +<li>Run the exact same Free Software as their service provider</li> +<li>Run the exact same Free Software infrastructure as code as their +service provider</li> +</ul> +<p>The requirement regarding Free Software infrastructure as code refers +to, for instance, the AWS control panel and all that is behind it when +creating a new MySQL service. It includes whatever a competitor would +need to run the same online service. An example would be +https://enough.community, an infrastructure as code dedicated to +creating the services needed by whistleblowers and human rights +defenders. It consumes resources rented by hosting providers, assembles +disks and machines, setup monitoring and intrusion detection, installs +various online services and upgrades them.</p> +<p>The availability of the software that creates the infrastructure is not +only useful to the competitors of a service provider. It also benefits a +non-profit that wants to provide (for instance) Wordpress instances to +its members. Without it they would need to create something from scratch +using building blocks such as CiviCRM. Even though such building blocks +exist, this is a significant undertaking and effectively a blocker.</p> +<h1 id="federated-online-services-and-durability">Federated online services and durability<a class="zola-anchor" href="#federated-online-services-and-durability" aria-label="Anchor link for: federated-online-services-and-durability" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>All self-hosted services are in danger of losing the data they contain. +When a Wordpress service is hosted in a home and the machine dies, it +must be restored from backups... when there are backups. Hosting +companies ensure the durability of the data with their own backup +system. It creates a dilemma for people who are looking into self +hosting: independence is desirable, but is it worth taking the risk of +data loss?</p> +<p>Federated online services do not suffer from this problem, because they +can mirror each other. A Gitea instance that is federated with another +will mirror copies of software projects found on its peers. Should one +instance be destroyed, mirrored projects can be resurrected from the +federated instance. Not only is it a practical way to ensure the (rare) +failure of an entire datacenter, it also helps with the (more frequent) +destruction of self-hosted machines. Contrary to backups that require +special attention, the replication involved in federated online service +is built in and works continuously. There is no need for an extra backup +service that is very rarely used and therefore likely to fail when +needed.</p> +<p>Federated services are not yet mainstream and Gitea is one of the rare +services that started to implement the concept. In the interim, +customers of an online hosting service will need to worry about backups +to ensure the durability of their data. But the ultimate solution for +them won't be the emergence of an ideal backup infrastructure, it will +be replication (via federated services) that will continuously ensure +the durability of their data.</p> +<h1 id="paths-forward">Paths forward<a class="zola-anchor" href="#paths-forward" aria-label="Anchor link for: paths-forward" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The Gitea project itself, following the footsteps of Discourse or +Weblate, could provide a hosting service. Part of its current user base +may become customers and there does not seem to be any blocker to make +that happen. As with most successful Free Software project, people +working on Gitea daily are already very busy and cannot engage in such a +long term project. But Aravinth and myself can, if they will have us.</p> +<p>Another path forward would be to wrap Gitea into a bundle that existing +hosting companies could easily use to provide such a service to their +customers. The biggest hosting companies are unlikely to be interested: +if Digital Ocean was to provide upgrades on top of their existing Gitea +image, they are more likely to rely on their internal staff to implement +that from scratch, as proprietary software integrated into their +existing infrastructure. But smaller hosting companies such as +https://Octopuce.fr or https://Easter-Eggs.com, who already deploy Gitea +instances for their customers, would use it if, for instance, it helped +with the upgrades. They would then kindly be reminded to give back a +share of their profits in order to sustain the development of the +service they deploy.</p> +<p>Finally it would also be possible to follow the example of GitLab in the +early days (before it turned to proprietary software) or Codeberg and +offer a free shared forge hosting service to build a user base. After a +few years, a percentage of the user base would convert to being paid +customers or donors to sustain the activity and part of the income would +be used to sustain the development of the service.</p> + + + diff --git a/tags/free-software-sustainability/index.html b/tags/free-software-sustainability/index.html new file mode 100644 index 0000000..817edb1 --- /dev/null +++ b/tags/free-software-sustainability/index.html @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + free-software-sustainability | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + diff --git a/tags/free-software/atom.xml b/tags/free-software/atom.xml new file mode 100644 index 0000000..ef7aff4 --- /dev/null +++ b/tags/free-software/atom.xml @@ -0,0 +1,238 @@ + + + - free-software + + + Zola + 2022-04-18T00:00:00+00:00 + https://gna.org/tags/free-software/atom.xml + + Project plans for a hosted Gitea online service + 2022-04-18T00:00:00+00:00 + 2022-04-18T00:00:00+00:00 + + https://gna.org/blog/project-plans-for-hosted-gitea-online-service/ + <p><em>This post was originally published on <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">Loïc Dachary's +blog</a>.</em></p> +<hr /> +<p>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, in the same +way they can go to https://discourse.org for a forum, or +https://nextcloud.com for storage. Instead of waiting for that to +happen, <a href="https://batsense.net/about/">Aravinth</a> and +<a href="https://dachary.org/">myself</a> decided to do something about it, in a +way that is in line with our shared values: transparency and Free +Software.</p> +<p>After doing some research we found counter examples that showed the +pitfalls to avoid. GitLab because its business model heavily relies on +selling proprietary licenses. CiviCRM because setting it up is complex +and requires training: users can't figure it out on their own. Gitea +images provided by Digital Ocean because they do not include security +upgrades. MySQL configured and run by AWS because of the vendor lock-in +that makes it impossible to self-host.</p> +<p>We concluded that an online service such as Gitea can be hosted in a +sustainable way as long as:</p> +<ul> +<li>It is well maintained and upgrades itself</li> +<li>It can be self-hosted</li> +<li>The service can automatically be restored from backups when the +underlying resources fail</li> +</ul> +<p>GitHub and GitLab make it look like there is a market around software +forges. It is however impossible to figure out if this market exists +only because it is based on proprietary software. How many of these +customers would pay for a Free Software hosted Gitea instance?</p> +<p>Even if these customers do exist, a new service provider would have to +figure out how to convince them to subscribe. The technical development +of the service can be done within weeks but building a sustainable +business takes much longer. Again, there were examples of what can go +wrong, for instance ElasticSearch. After years of work developing a +successful online service and a customer base, AWS entered the +competition and started to take it away from them.</p> +<p>The sustainability of the Free Software ecosystem is a new and very +difficult problem to solve. It is discussed more than it ever was in the +wake of security breaches originating from widely used and yet abandoned +library or disillusioned Free Software authors self-sabotaging their +next release, and everyone has diverging opinions. It falls on each Free +Software author to spend time to think about their own projects because +there are no handbook or good examples to follow. That is what Aravinth +and myself did to find a semblance of clarity and decide how to go about +this hosted Gitea service idea.</p> +<h1 id="sustaining-free-software-online-services">Sustaining Free Software online services<a class="zola-anchor" href="#sustaining-free-software-online-services" aria-label="Anchor link for: sustaining-free-software-online-services" + ><span class="anchor-icon">#</span></a +> +</h1> +<h2 id="more-mature-online-services-mean-less-opportunities-to-sell-services">More mature online services mean less opportunities to sell services<a class="zola-anchor" href="#more-mature-online-services-mean-less-opportunities-to-sell-services" aria-label="Anchor link for: more-mature-online-services-mean-less-opportunities-to-sell-services" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>Ideally the software running an online service is rock solid and bugs +are so rare that it can run unattended. This is true of +https://wordpress.org and it is not uncommon for an instance to run for +years while upgrading themselves to get security patches. The cost of +maintaining such a service is negligible and hosting companies can offer +it for free to their customers. They make their profit by renting the +machines on which the service runs.</p> +<p>When the software is not as mature, it is more expensive to run. Bugs +need fixing, upgrades require manual intervention, users must be trained +to overcome the complexity of the user experience, etc. Well known +examples are Discourse or CiviCRM for which companies sell services to +overcome these issues.</p> +<p>But when an organization is both the author of the software and the +provider of paid services to compensate for its lack of maturity, it +creates a conflict of interest. Should they focus their effort on making +the software more mature, they would harm a business model that is based +on this very lack of maturity. For instance, if the author of a software +also sells training courses, they are not motivated to solve user +experience issues. If they did, it would lower the need for training +courses and reduce their income.</p> +<h2 id="free-software-online-services-in-the-wake-of-the-sustainability">Free Software online services in the wake of the sustainability<a class="zola-anchor" href="#free-software-online-services-in-the-wake-of-the-sustainability" aria-label="Anchor link for: free-software-online-services-in-the-wake-of-the-sustainability" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>crisis</p> +<p>Nowadays all Free Software authors struggle to get enough resources to +produce a steady stream of releases, even when the project is very +popular. This sustainability problem is getting more and more attention +as the number of Free Software projects in use world wide keeps growing. +Even the simplest online service relies on thousands of Free Software +projects, each of which needs work to keep going. Accidents caused by +poorly maintained Free Software projects become more frequent.</p> +<p>This Free Software sustainability crisis is barely emerging and very +much resembles ecological problems such as climate change. In both cases +it is very difficult to figure out how to properly care for the +resources that are consumed. After decades of advocacy, it is generally +accepted that fossil energy won't last forever but there still is a long +way to go. It will also take a long time for the Free Software community +to answer this simple question: how to sustain an ever growing library +of Free Software?</p> +<p>Luckily, it is relatively simpler to solve that problem for an online +service because it has users. They can be reminded that their assistance +is needed to keep the project afloat, for instance by a donation. A +proposition that would be much more difficult to make for the author of +a cryptographic library. Convincing users to pay for an online service +has the best chance of success when the author of the software is also +the service provider. This is the business model of Discourse and +Weblate, but it is relatively fragile because nothing stands in the way +of the competition.</p> +<p>A few years ago ElasticSearch successfully developed an online service +offering. But when AWS entered the competition and was better at +marketing it, ElasticSearch quickly realized they would likely go out of +business. They tried to fight back by <a href="https://www.elastic.co/blog/licensing-change">changing their +license</a>, which was the +wrong answer to a real problem. Discourse or Weblate are also likely to +face competition from hosting companies in the future and they may not +survive it.</p> +<p>In the end, the durable source of income for a Free Software online +service is to rent the resources (CPU/RAM/network/disk) it needs to run. +In other words only hosting companies can make a profit when running +such an online service. And for that reason they also need to share part +of the profits to ensure the sustainability of the Free Software service +their customers need.</p> +<h1 id="online-services-vendor-lock-in-is-cured-by-free-software">Online services vendor lock-in is cured by Free Software<a class="zola-anchor" href="#online-services-vendor-lock-in-is-cured-by-free-software" aria-label="Anchor link for: online-services-vendor-lock-in-is-cured-by-free-software" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>When hosting companies offer online services they also provide upgrades +and transparent recovery when the hardware fails. But none of them allow +the service to be self-hosted. When their price policy change, or when +the term of services ban users from a given country, migrating the +service elsewhere it costly and difficult. For instance when AWS runs +MySQL for their customers, they allow to download the data but not the +software that runs the proprietary AWS interface used to configure and +control the server. Another example is GitHub where the content of the +git repository can be downloaded but the code that runs GitHub itself is +not Free Software.</p> +<p>If a customer cannot run the same software as their service provider, +they are locked-in, even if they can download their data. It is a common +misconception to think that there is no vendor lock-in as long as it is +possible to download the data in an standard format. Migrating the data +from one software to another is, more often than not, time consuming and +costly to a point that it is effectively a blocker. A GitHub salesperson +would argue that it is possible for people to run GitHub Enterprise on +their own hardware. But the vendor lock-in is still present via the +proprietary license contract. The user experience, maintenance and +upgrades are still exclusively controlled by GitHub.</p> +<p>To guarantee their independence, the customers of an online service need +to be able to:</p> +<ul> +<li>Download their data</li> +<li>Run the exact same Free Software as their service provider</li> +<li>Run the exact same Free Software infrastructure as code as their +service provider</li> +</ul> +<p>The requirement regarding Free Software infrastructure as code refers +to, for instance, the AWS control panel and all that is behind it when +creating a new MySQL service. It includes whatever a competitor would +need to run the same online service. An example would be +https://enough.community, an infrastructure as code dedicated to +creating the services needed by whistleblowers and human rights +defenders. It consumes resources rented by hosting providers, assembles +disks and machines, setup monitoring and intrusion detection, installs +various online services and upgrades them.</p> +<p>The availability of the software that creates the infrastructure is not +only useful to the competitors of a service provider. It also benefits a +non-profit that wants to provide (for instance) Wordpress instances to +its members. Without it they would need to create something from scratch +using building blocks such as CiviCRM. Even though such building blocks +exist, this is a significant undertaking and effectively a blocker.</p> +<h1 id="federated-online-services-and-durability">Federated online services and durability<a class="zola-anchor" href="#federated-online-services-and-durability" aria-label="Anchor link for: federated-online-services-and-durability" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>All self-hosted services are in danger of losing the data they contain. +When a Wordpress service is hosted in a home and the machine dies, it +must be restored from backups... when there are backups. Hosting +companies ensure the durability of the data with their own backup +system. It creates a dilemma for people who are looking into self +hosting: independence is desirable, but is it worth taking the risk of +data loss?</p> +<p>Federated online services do not suffer from this problem, because they +can mirror each other. A Gitea instance that is federated with another +will mirror copies of software projects found on its peers. Should one +instance be destroyed, mirrored projects can be resurrected from the +federated instance. Not only is it a practical way to ensure the (rare) +failure of an entire datacenter, it also helps with the (more frequent) +destruction of self-hosted machines. Contrary to backups that require +special attention, the replication involved in federated online service +is built in and works continuously. There is no need for an extra backup +service that is very rarely used and therefore likely to fail when +needed.</p> +<p>Federated services are not yet mainstream and Gitea is one of the rare +services that started to implement the concept. In the interim, +customers of an online hosting service will need to worry about backups +to ensure the durability of their data. But the ultimate solution for +them won't be the emergence of an ideal backup infrastructure, it will +be replication (via federated services) that will continuously ensure +the durability of their data.</p> +<h1 id="paths-forward">Paths forward<a class="zola-anchor" href="#paths-forward" aria-label="Anchor link for: paths-forward" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The Gitea project itself, following the footsteps of Discourse or +Weblate, could provide a hosting service. Part of its current user base +may become customers and there does not seem to be any blocker to make +that happen. As with most successful Free Software project, people +working on Gitea daily are already very busy and cannot engage in such a +long term project. But Aravinth and myself can, if they will have us.</p> +<p>Another path forward would be to wrap Gitea into a bundle that existing +hosting companies could easily use to provide such a service to their +customers. The biggest hosting companies are unlikely to be interested: +if Digital Ocean was to provide upgrades on top of their existing Gitea +image, they are more likely to rely on their internal staff to implement +that from scratch, as proprietary software integrated into their +existing infrastructure. But smaller hosting companies such as +https://Octopuce.fr or https://Easter-Eggs.com, who already deploy Gitea +instances for their customers, would use it if, for instance, it helped +with the upgrades. They would then kindly be reminded to give back a +share of their profits in order to sustain the development of the +service they deploy.</p> +<p>Finally it would also be possible to follow the example of GitLab in the +early days (before it turned to proprietary software) or Codeberg and +offer a free shared forge hosting service to build a user base. After a +few years, a percentage of the user base would convert to being paid +customers or donors to sustain the activity and part of the income would +be used to sustain the development of the service.</p> + + + diff --git a/tags/free-software/index.html b/tags/free-software/index.html new file mode 100644 index 0000000..64589df --- /dev/null +++ b/tags/free-software/index.html @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + free-software | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + diff --git a/tags/gitea/atom.xml b/tags/gitea/atom.xml new file mode 100644 index 0000000..70a8c92 --- /dev/null +++ b/tags/gitea/atom.xml @@ -0,0 +1,720 @@ + + + - gitea + + + Zola + 2022-07-20T00:00:00+00:00 + https://gna.org/tags/gitea/atom.xml + + 1.17 breaking changes episode 2: preserving a custom gitconfig + 2022-07-20T00:00:00+00:00 + 2022-07-20T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-2/ + <p>On June 21st, 2022 1.17.0-rc1 was published and the location of the gitconfig file moved to a new location, <a href="2022-06-23-1.17-breaking-episode-1">which required manual intervention</a>. This change impacted a large number of Gitea installations because the docker image tag <strong>latest</strong> <a href="https://mastodon.online/@hostea/108514134565401798">was set to 1.17.0-rc1</a> 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.</p> +<p>Unfortunately moving the git home directory in 1.17.0-rc1 was implemented in way that created a security problem. The <a href="https://github.com/go-gitea/gitea/pull/20114">fix that was merged in Gitea</a> to fix it requires moving the gitconfig file and was released July 19th, 2022 in 1.17.0-rc2.</p> +<p>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 <strong>latest</strong> 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.</p> +<p>In 1.17.0-rc2, a custom .gitconfig must be moved manually to the <a href="https://docs.gitea.io/en-us/config-cheat-sheet/#git-git">new git home directory</a> as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Data Root Path</strong>/home (which is <code>/data/gitea/home</code> in the example above).</li> +</ul> + + + + Get a Gitea instance with CI at Gna! + 2022-07-10T00:00:00+00:00 + 2022-07-10T00:00:00+00:00 + + https://gna.org/blog/experimental/ + <p>Hosting a Gitea instance on Gna! is now possible (but still experimental). It is meant to be a minimum viable product: anyone can <a href="https://hosteadashboard.gna.org">create a new dedicated Gitea instance</a> within minutes and pay for it on a monthly basis with a credit card. It includes a dedicated CI based on <a href="https://woodpecker-ci.org/">Woodpecker</a>. 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.</p> +<video width="600" controls> + <source src="https://cloud.forgefriends.org/s/xXLcYpsE469tJEj/download?path=&files=hostea-screencast-vm-create.mp4" type="video/mp4" /> +</video> +<p>The service is 100% infrastructure as code, published as <a href="https://lab.enough.community/main/infrastructure/-/tree/9e18ebbf675c8a65d1585d20b4cf6295af6e52ed/playbooks/hosteadashboard">Ansible playbooks within Enough</a>. It can be self-hosted on bare metal (with <a href="https://libvirt.org/">libvirt</a>) or in the cloud (with <a href="https://www.openstack.org/">OpenStack</a>): follow the <a href="https://enough-community.readthedocs.io/en/latest/introduction.html#quick-start">quick start</a>, configure playbooks for <a href="https://enough-community.readthedocs.io/en/latest/services/hostea.html">hostea</a> and <a href="https://enough-community.readthedocs.io/en/latest/services/hosteadashboard.html">the dashboard</a>.</p> +<p>The organization supporting Gna! is a <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a> of individuals and organizations. The <a href="https://forum.hostea.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<h3 id="the-origin">The origin<a class="zola-anchor" href="#the-origin" aria-label="Anchor link for: the-origin" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In February 2022 the project of running a dedicated Gitea hosting service was <a href="https://discourse.gitea.io/t/a-gitea-hosting-service-under-the-umbrella-of-the-gitea-project/4692">proposed to the Gitea project</a> and other organizations and <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">plans were drafted</a>. After a month of discussions it turned out to not be a <a href="https://blog.dachary.org/2022/03/11/the-inconclusive-story-of-four-failed-project-offers/">good match for any of them</a>.</p> +<p>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.</p> +<h3 id="a-technical-stack-with-no-users">A technical stack with no users<a class="zola-anchor" href="#a-technical-stack-with-no-users" aria-label="Anchor link for: a-technical-stack-with-no-users" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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.</p> +<p>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.</p> +<p>To keep the madness contained and enjoyable, it was decided to set a deadline to July 1st and to <a href="https://gitea.gna.org/Hostea/july-mvp/issues">define precise and realistic technical goals</a>. 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.</p> +<h3 id="a-horizontal-collective-with-a-revenue-sharing-model">A horizontal collective with a revenue sharing model<a class="zola-anchor" href="#a-horizontal-collective-with-a-revenue-sharing-model" aria-label="Anchor link for: a-horizontal-collective-with-a-revenue-sharing-model" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a>. It feels like a contradiction for a project committed to decentralization to be governed by a centralized organization.</p> +<p>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 <a href="https://forum.gna.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<p>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.</p> +<h3 id="dedicated-to-forge-federation">Dedicated to forge federation<a class="zola-anchor" href="#dedicated-to-forge-federation" aria-label="Anchor link for: dedicated-to-forge-federation" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/">forge federation</a>, 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.</p> + + + + 1.17 breaking changes episode 1: preserving a custom gitconfig + 2022-06-22T00:00:00+00:00 + 2022-06-22T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-1/ + <p>Before version 1.17, when Gitea needed to change the <a href="https://git-scm.com/docs/git-config">git configuration</a>, it modified the <code>$HOME/.gitconfig</code> file. For instance it would <a href="https://github.com/go-gitea/gitea/blob/release/v1.16/modules/git/git.go#L174-L177">set core.quotePath to false</a>:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[core] +</span><span> </span><span style="color:#bf616a;">quotePath </span><span>= </span><span style="color:#d08770;">false +</span></code></pre> +<p>When installing Gitea <a href="https://docs.gitea.io/en-us/install-with-docker/">from docker</a> or <a href="https://docs.gitea.io/en-us/install-with-docker-rootless/">rootless</a> or even <a href="https://docs.gitea.io/en-us/install-from-binary/">from binary</a> this <code>$HOME/.gitconfig</code> file belongs to a user that is <a href="https://docs.gitea.io/en-us/install-from-binary/#prepare-environment">dedicated to Gitea</a> and not used by anyone else.</p> +<p>However, if an Gitea installation was done differently and <code>$HOME/.gitconfig</code> 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:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[user] +</span><span> </span><span style="color:#bf616a;">name </span><span>= Jane Doe +</span><span> </span><span style="color:#bf616a;">email </span><span>= jane</span><span style="color:#b48ead;">@doe</span><span>.com +</span></code></pre> +<p>It is also possible that the file was modified manually by the Gitea admin for other reasons. In both there is a <strong>potential for breakage when upgrading to Gitea &gt;= 1.17 because the location of the file changed</strong>. It must be moved manually to the new location as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Repository Root Path</strong> (which is <code>/data/git/repositories</code> in the example above).</li> +</ul> +<p>The reason why this breaking change was introduced is to workaround <a href="https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/">a rare problem</a> impacting Gitea installations relying on networked volumes.</p> + + + + [tutorial] A gentle introduction to the gitea doctor + 2022-06-14T00:00:00+00:00 + 2022-06-14T00:00:00+00:00 + + https://gna.org/blog/gentle-introduction-to-the-doctor/ + <p>While helping people with their upgrades <a href="https://discourse.gitea.io/t/migration-from-1-2-to-1-16-8/5309">in the Gitea forum</a> or <a href="https://forum.gna.org/t/gitea-upgrade-from-1-14-1-to-1-16-8/90">at the Gna! clinic</a>, I realized that few Gitea admins know about the <a href="https://docs.gitea.io/en-us/command-line/#doctor"><code>gitea doctor</code></a> command and decided to write this blog post as a gentle introduction.</p> +<h3 id="an-apple-a-day-keeps-the-doctor-away">An apple a day keeps the doctor away<a class="zola-anchor" href="#an-apple-a-day-keeps-the-doctor-away" aria-label="Anchor link for: an-apple-a-day-keeps-the-doctor-away" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Or in our case, Gitea versions <a href="https://github.com/go-gitea/gitea/blob/v1.11.5/cmd/doctor.go">below 1.11.5</a>. Since then, the <code>gitea doctor</code> 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 <code>gitea doctor</code> was backported to <a href="https://github.com/go-gitea/gitea/blob/v1.10.5/cmd/doctor.go">Gitea 1.10.5</a> and <a href="https://github.com/go-gitea/gitea/blob/v1.10.6/cmd/doctor.go">Gitea 1.10.6</a> and may be of help if you run this particular version and are facing the problem that motivated the backport.</p> +<p>With each version <code>gitea doctor</code> improves and gains new capabilities. For instance, in Gitea 1.17 it becomes aware of <a href="https://github.com/go-gitea/gitea/pull/19731">orphaned pull requests</a> and is able to fix them. If such a problem exists in Gitea 1.16, it does not know about it.</p> +<h3 id="calling-the-doctor">Calling the doctor<a class="zola-anchor" href="#calling-the-doctor" aria-label="Anchor link for: calling-the-doctor" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In the following, examples are based on a Gitea 1.16.8 instance you can run as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker run</span><span style="color:#bf616a;"> --name</span><span> gitea</span><span style="color:#bf616a;"> -p</span><span> 3000:3000</span><span style="color:#bf616a;"> -e</span><span> GITEA__security__INSTALL_LOCK=true</span><span style="color:#bf616a;"> -d</span><span> gitea/gitea:1.16.8-rootless +</span><span style="color:#bf616a;">$</span><span> docker exec gitea gitea admin user create</span><span style="color:#bf616a;"> --admin --username</span><span> root</span><span style="color:#bf616a;"> --password</span><span> admin1234</span><span style="color:#bf616a;"> --email</span><span> root@example.com +</span><span style="color:#bf616a;">$</span><span> docker exec gitea mkdir /var/lib/gitea/data/log +</span></code></pre> +<p>And then you can go to the <a href="https://127.0.0.1:3000/">web interface</a> to create a <code>test</code> repository, with an initial <code>README.md</code> file. When this is done the doctor can be called as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --all +</span><span style="color:#bf616a;">[1]</span><span> Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Configuration File Path: &quot;</span><span style="color:#a3be8c;">/etc/gitea/app.ini</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Repository Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/git/repositories</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Data Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Custom File Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/custom</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Work directory: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Log Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/data/log</span><span>&quot; +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[2]</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[3]</span><span> Check Database Version +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[4]</span><span> Check consistency of database +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[5]</span><span> Check if user with wrong type exist +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[6]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[7]</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> ScriptType bash is on the current PATH at /bin/bash +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[8]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[9]</span><span> Recalculate Stars number for all user +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[10]</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> 0 old archives in repository need to be deleted +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[11]</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[12]</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Found 0 broken repo_units +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[13]</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> 0 PRs with incorrect mergebases of 0 PRs total in 1 repos +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[14]</span><span> Check git-daemon-export-ok files +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span></code></pre> +<h3 id="what-does-the-doctor-know">What does the doctor know?<a class="zola-anchor" href="#what-does-the-doctor-know" aria-label="Anchor link for: what-does-the-doctor-know" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Although the <code>doctor</code> can be compared to <a href="https://en.wikipedia.org/wiki/Fsck">fsck(8)</a>, it does not know everything. It took decades for <code>fsck</code> 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 <code>fsck</code> cannot recover from a data loss.</p> +<p>The first <code>doctor</code> 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:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --list +</span><span style="color:#bf616a;">Default</span><span> Name Title +</span><span style="color:#bf616a;">*</span><span> paths Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">storages</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">*</span><span> check-db-version Check Database Version +</span><span> </span><span style="color:#bf616a;">check-db-consistency</span><span> Check consistency of database +</span><span style="color:#bf616a;">*</span><span> check-user-type Check if user with wrong type exist +</span><span style="color:#bf616a;">*</span><span> authorized-keys Check if OpenSSH authorized_keys file is up-to-date +</span><span> </span><span style="color:#bf616a;">script-type</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">hooks</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">recalculate-stars-number</span><span> Recalculate Stars number for all user +</span><span> </span><span style="color:#bf616a;">check-old-archives</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">enable-push-options</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">fix-broken-repo-units</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">recalculate-merge-bases</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">check-git-daemon-export-ok</span><span> Check git-daemon-export-ok files +</span></code></pre> +<p>And then call the <code>check</code> that looks interesting:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> authorized-keys +</span><span style="color:#bf616a;">[1]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>The challenge is to figure out which <code>check</code> does what and at the moment the best source of information is ... <a href="https://github.com/go-gitea/gitea/tree/v1.16.8">the sources</a> themselves. The <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/cmd/doctor.go">doctor.go</a> command is the entry point and <a href="https://github.com/go-gitea/gitea/tree/v1.16.8/modules/doctor">the doctor directory</a> contains the rest.</p> +<p>Some <code>checks</code> are straightforward to understand, even if you do not know Go, such as <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/modules/doctor/authorizedkeys.go">the authorized-keys check</a>. Others are much more involved and your best chance is to <a href="https://matrix.to/#/#gitea:matrix.org">ask the Gitea chatroom</a> for help.</p> +<h3 id="is-it-going-to-hurt">Is it going to hurt?<a class="zola-anchor" href="#is-it-going-to-hurt" aria-label="Anchor link for: is-it-going-to-hurt" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>By default the doctor (very much like <code>fsck -N</code>) 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 <strong>[I]</strong> (which indicates an information) and <strong>[W]</strong> 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 <strong>[I]</strong>, <a href="https://github.com/go-gitea/gitea/pull/19836">which has been fixed</a> in a more recent version of the doctor.</p> +<p>Now let's do something bad: remove the permissions from a hook in our repository:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea chmod</span><span style="color:#bf616a;"> -x</span><span> /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive +</span></code></pre> +<p>Run the doctor with the <code>check</code> supposed to find that out:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>Ask it to fix this with the <code>--fix</code> flag:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks</span><span style="color:#bf616a;"> --fix +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Regenerated hooks for root/test +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>And run it one last time to check all is well:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>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 <code>doctor.log</code> file in the directory from which it runs. Or it can be displayed on the standard output with <code>--log-file -</code>, which is most convenient when running in docker.</p> +<h3 id="going-further">Going further<a class="zola-anchor" href="#going-further" aria-label="Anchor link for: going-further" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>If that was helpful to you, I would very much appreciate if you <a href="https://mastodon.online/@dachary">send me a message on Mastodon</a>. It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could <a href="https://github.com/go-gitea/gitea/pulls">send a pull request</a> to improve the doctor and help it mature.</p> + + + + [solved] Zombies created by Gitea + 2022-06-04T00:00:00+00:00 + 2022-06-04T00:00:00+00:00 + + https://gna.org/blog/zombies-part-2/ + <p>Gitea can <a href="/blog/zombies">create zombies</a>, for instance if a Git mirror takes too long. When updating a mirror, Gitea relies on the <code>git remote update</code> command which creates a child process, <code>git-remote-https</code>, to fetch data from the remote repository. Gitea has an internal timeout that will kill the child process (e.g. <code>git remote update</code>) 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.</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ time git clone https://4.4.4.4 +</span><span>Clonage dans &#39;4.4.4.4&#39;... +</span><span>fatal: impossible d&#39;accéder à &#39;https://4.4.4.4/&#39;: Failed to connect to 4.4.4.4 port 443: Connexion terminée par expiration du délai d&#39;attente +</span><span> +</span><span>real 2m9,753s +</span><span>user 0m0,001s +</span><span>sys 0m0,009s +</span></code></pre> +<p>As explained in the <a href="/blog/zombies/#killing-a-child-process-and-all-its-children">diagnostic blog post regarding Gitea zombies</a> there fortunately is a very simple way to avoid this by making sure each Gitea child is a <a href="https://en.wikipedia.org/wiki/Process_group">process group leader</a>. That first step was <a href="https://github.com/go-gitea/gitea/pull/19865">introduced in Gitea 1.17</a> and <a href="https://github.com/go-gitea/gitea/pull/19865">backported to Gitea 1.16.9</a>. The actual bug fix can now be implemented.</p> +<h3 id="using-negative-process-id-to-kill-children">Using negative process id to kill children<a class="zola-anchor" href="#using-negative-process-id-to-kill-children" aria-label="Anchor link for: using-negative-process-id-to-kill-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>When Gitea timeout on a child, it relies on <a href="https://github.com/golang/go/blob/f8a53df314e4af8cd350eedb0dae77d4c4fc30d0/src/os/exec/exec.go#L650">os.Process.Kill</a> which translates into a using the kill(2) system call to send a SIGKILL signal to unconditionally terminate it: <code>kill(pid, SIGKILL)</code>. Using a negative pid with <code>kill(-pid, SIGKILL)</code> 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:</p> +<blockquote> +<p>If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.</p> +</blockquote> +<p>Which is implemented as follows in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L130">Friendly Forge Format library</a>:</p> +<blockquote> +<p><code>syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)</code></p> +</blockquote> +<h3 id="not-using-the-default-go-commandcontext">Not using the default Go CommandContext<a class="zola-anchor" href="#not-using-the-default-go-commandcontext" aria-label="Anchor link for: not-using-the-default-go-commandcontext" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Since <a href="https://pkg.go.dev/os/exec#CommandContext">CommandContext</a> 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 <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L75-82">Friendly Forge Format library</a> does it:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> ctxErr := watchCtx(ctx, cmd.Process.Pid) +</span><span> err = cmd.Wait() +</span><span> interruptErr := &lt;-ctxErr +</span><span> // If cmd.Wait returned an error, prefer that. +</span><span> // Otherwise, report any error from the interrupt goroutine. +</span><span> if interruptErr != nil &amp;&amp; err == nil { +</span><span> err = interruptErr +</span><span> } +</span></code></pre> +<h3 id="testing-the-bug-is-fixed-and-stays-fixed">Testing the bug is fixed and stays fixed<a class="zola-anchor" href="#testing-the-bug-is-fixed-and-stays-fixed" aria-label="Anchor link for: testing-the-bug-is-fixed-and-stays-fixed" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Long standing bugs that are difficult to reproduce manually such as this one require robust testing to ensure that:</p> +<ul> +<li>the diagnostic identifying the root cause is correct</li> +<li>the bug fix works</li> +<li>it does not resurface insidiously because of a subtle regression introduce years later</li> +</ul> +<p>It is easy to implement as can be seen in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L44-76">Friendly Forge Format library</a>. In a nutshell:</p> +<ul> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L53">git clone https://4.4.4.4</a> which will hang because of firewall rules</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L60-65">wait for the git-remote-https</a> grandchild process to be spawned</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L67-68">cancel the context and wait for the goroutine to terminate</a></li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L70-75">verify the git-remote-https is killed</a></li> +</ul> +<p>And with that... no more zombies!</p> + + + + [diagnostic] Zombies created by Gitea + 2022-06-02T00:00:00+00:00 + 2022-06-02T00:00:00+00:00 + + https://gna.org/blog/zombies/ + <p>The first <a href="https://github.com/go-gitea/gitea/issues/3242">issue about zombie processes</a> created by Gitea was reported in 2017 and <a href="https://github.com/go-gitea/gitea/issues/13987">resurfaced</a> on a <a href="https://github.com/go-gitea/gitea/issues/19077">regular basis</a>. 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:</p> +<ul> +<li>Gitea updates a mirror by spawning the process <code>git remote update</code></li> +<li><code>git remote update</code> spawns yet another process, <code>git fetch</code></li> +<li><code>git fetch</code> is stuck, for instance because of network problems, and Gitea eventually times out</li> +<li>Gitea kill the process <code>git remote update</code></li> +<li>When killed <code>git remote update</code> does not kill its own child and <code>git fetch</code> becomes an orphaned process which keeps running</li> +<li>When <code>git fetch</code> eventually completes it becomes a zombie because its original parent is no longer around to wait on it</li> +</ul> +<h3 id="pid-1-process-and-waiting-on-orphans">PID 1 process and waiting on orphans<a class="zola-anchor" href="#pid-1-process-and-waiting-on-orphans" aria-label="Anchor link for: pid-1-process-and-waiting-on-orphans" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <code>/bin/init</code> and when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile">default docker image</a> this is <code>s6</code>: they will both wait on orphaned processes and there won't be any zombies.</p> +<h3 id="what-if-gitea-is-the-only-running-process">What if Gitea is the only running process?<a class="zola-anchor" href="#what-if-gitea-is-the-only-running-process" aria-label="Anchor link for: what-if-gitea-is-the-only-running-process" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>But when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile.rootless">rootless docker image</a>, 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:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker run --name gitea -p 8080:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless +</span><span>$ docker exec --user 1000 gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com +</span></code></pre> +<p>The <code>git</code> command can then be replaced with a script that waits forever:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ ( echo -e &#39;#!/bin/bash\nsleep infinity&#39; ) | docker exec -i --user root gitea tee /usr/bin/git +</span><span>$ docker exec --user root gitea chmod +x /usr/bin/git +</span></code></pre> +<p>Trying to create a repository from the web interface will create the conditions for a zombie to show:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 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 +</span><span> 164 165 sleep sleep infinity +</span></code></pre> +<p>When the <code>git</code> process is killed by Gitea, the <code>sleep</code> child will be orphaned:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep sleep infinity +</span></code></pre> +<p>Killing it will turn it into a zombie:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea kill 165 +</span><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep [sleep] +</span></code></pre> +<h3 id="killing-a-child-process-and-all-its-children">Killing a child process and all its children<a class="zola-anchor" href="#killing-a-child-process-and-all-its-children" aria-label="Anchor link for: killing-a-child-process-and-all-its-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://en.wikipedia.org/wiki/Process_group">process group leaders</a>. In a nutshell it means that when the child is killed all its children and grand children are also killed.</p> + + + + [solved] Gitea 1.15 and up: path not found or permission denied + 2022-05-28T00:00:00+00:00 + 2022-05-28T00:00:00+00:00 + + https://gna.org/blog/path-not-found/ + <p>In Gitea 1.15 the <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/custom/conf/app.example.ini">app.example.ini</a> file was changed to <a href="https://github.com/go-gitea/gitea/commit/4a84022d2559ccfc99960c7c654ee8b9b38664f7">comment out most of the values</a>. The assumption was that all values exactly matched the defaults <a href="https://github.com/go-gitea/gitea/blob/main/modules/setting/setting.go">in the source code</a>. However, there are differences, for instance for <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/modules/setting/setting.go#L771">APP_DATA_PATH</a>. Before Gitea 1.15, <code>app.example.ini</code> contained:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>directory from which the Gitea server was running</strong>. In Gitea 1.15 up to 1.16, it was commented out:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. </p> +<p>When a distribution such as voidlinux <a href="https://github.com/void-linux/void-packages/blob/master/srcpkgs/gitea/patches/config.patch">uses app.example.ini</a> as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea <a href="https://github.com/go-gitea/gitea/issues/19367">fails with errors</a> such as <code>unable to open level db at data/data/queues/common: mkdir data: permission denied</code>. The regression did not show as soon as Gitea 1.15 became available in voidlinux because the package <a href="https://github.com/void-linux/void-packages/blob/7fc9190f0e0d557dd5031e68df4e183892d4315b/srcpkgs/gitea/patches/config.patch#L62">explicitly set <code>APP_DATA_PATH</code></a>. But this <a href="https://github.com/void-linux/void-packages/commit/19d986a2cae9ce73d32552ddb62443b5e7fa13e2">changed when Gitea 1.15.6 was packaged</a> and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the <a href="https://github.com/void-linux/void-packages/commit/44b6c96fa12ce9d993c7a2ac9486d892735b7e3a">Gitea 1.16.8</a> package.</p> +<p>The <code>APP_DATA_PATH</code> directory is not the only one, the <code>[log] ROOT_PATH</code> is another example. There is an <a href="https://github.com/go-gitea/gitea/pull/19815">ongoing effort</a> 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 <code>app.ini</code> file will be interpreted differently. In the case of <code>APP_DATA_PATH</code>, both:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>will be interpreted to be relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. Every Gitea installation using <strong>APP_DATA_PATH = data</strong> will need to update the value to be an absolute path such as <strong>/var/lib/gitea/data</strong> so that it keeps pointing to the expected directory.</p> +<p>In order to prepare for the change or ensure the consistency of all path, there fortunately is a very simple <strong>solution: always use absolute paths in the <code>app.ini</code> configuration file</strong>.</p> + + + + [solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else + 2022-05-15T00:00:00+00:00 + 2022-05-15T00:00:00+00:00 + + https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/ + <p>April 12, 2022 version <a href="https://lore.kernel.org/git/xmqqv8veb5i6.fsf@gitster.g/">git v2.35.2</a> was released and addresses a security issue <a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a>. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as <a href="https://security-tracker.debian.org/tracker/CVE-2022-24765">Debian GNU/Linux</a>, <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<p><strong>If Gitea runs as user <code>foo</code>, calls a patched Git version and a parent directory of the git repositories is owned by a user other than <code>foo</code>, it will fail</strong> with a message such as:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>Failed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository (&#39;/data/git/repositories/git/data.git&#39; is owned by someone else) +</span></code></pre> +<p>This started to show in the past few weeks to <a href="https://github.com/go-gitea/gitea/issues/19455">users running the Gitea binary on Windows</a> who also independently installed git v2.36. And then to people running <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106331149">Gitea from snap</a>, on <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106312061">a Synology NAS</a> and then people running from <a href="https://github.com/go-gitea/gitea/blob/main/Dockerfile#L2">Gitea docker images</a> which is based on <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<h3 id="workarounds">Workarounds<a class="zola-anchor" href="#workarounds" aria-label="Anchor link for: workarounds" + ><span class="anchor-icon">#</span></a +> +</h3> +<ul> +<li>If using <a href="https://hub.docker.com/r/gitea/gitea">Gitea docker images</a>: +<ul> +<li>upgrade to <a href="https://github.com/go-gitea/gitea/pull/19876">Gitea &gt;=1.16.9</a> or 1.17, both have git &gt;=2.36</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +<li>If the Gitea binary was installed independently of git, upgrade git to a version that is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a> and disable the security check entirely with: +<ul> +<li>impersonate the <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">user dedicated to Gitea</a> (usually git)</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +</ul> +<h3 id="bug-fix">Bug fix<a class="zola-anchor" href="#bug-fix" aria-label="Anchor link for: bug-fix" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>The <a href="https://github.com/go-gitea/gitea/pull/19870">bug fix</a> is for Gitea to ensure <code>git config --global --replace-all safe.directory '*'</code> is set on its <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">dedicated user</a> when it initializes. It is effective on the condition that the git CLI version is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a>.</p> +<h3 id="bug-fix-rationale">Bug fix rationale<a class="zola-anchor" href="#bug-fix-rationale" aria-label="Anchor link for: bug-fix-rationale" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>It is safe to <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs">disable the security check in Gitea</a>. It is not vulnerable to <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong> because it calls the git CLI <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/command.go#L160">after changing its working directory</a> to be the git repository targeted by the command (for instance <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/diff.go#L38-L45">diff</a>) or a temporary directory. Therefore <strong>it will not explore the parent directories looking for a git configuration file</strong>.</p> +<p>The security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and <strong>not because a parent directory is owned by an unexpected user</strong>. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong>.</p> +<p>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.</p> +<p>Gitea runs under a dedicated user, either when installed <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">from binary</a> or from <a href="https://docs.gitea.io/en-us/install-with-docker/">docker</a> and <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/git.go#L196-L207">modifies the global git configuration</a> depending on the git version at initialization time. Fixing the problem can therefore be done by <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#bcd72ff867cbd1ddd5b6518c3a05b5f1a6021286_209_209">disabling the security check in the global git config file at initialization time</a>. It also requires a minimum version of git 2.36 to be installed, which is the case for Gitea docker images with <a href="https://github.com/go-gitea/gitea/pull/19876">versions &gt;= 1.16.9</a>.</p> + + + + [solved] blank or error 500 page after login + 2022-05-08T00:00:00+00:00 + 2022-05-08T00:00:00+00:00 + + https://gna.org/blog/blank-or-error-500-page-after-login/ + <p>The <a href="https://docs.gitea.io/en-us/upgrade-from-gitea/#upgrade-from-binary">instructions to upgrade a Gitea instance</a> only require three to four steps. They work fine most of the time but the documentation is lacking a &quot;Troubleshooting&quot; 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.</p> +<p>An <a href="https://forum.gna.org/t/things-to-know-about-gitea-upgrades/39">inventory of the known upgrade issues</a> was started to figure out how to structure such a section in the documentation. The <a href="https://blog.gitea.io/">release notes</a> were analyzed all the way back to <a href="https://github.com/go-gitea/gitea/releases/tag/v1.9.6">Gitea 1.9.6</a> and the work is still in progress. Here is a sample of the tips that will be included:</p> +<ul> +<li>Upgrade directly to the latest Gitea version, there is no need to upgrade to intermediate versions.</li> +<li>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.</li> +<li>etc.</li> +</ul> +<p>However, even with the best documentation, someone will eventually <strong>run into an new problem</strong> and fixing it without compromising the integrity of the data will be challenging. This is best demonstrated by a real world example that was concluded a few days ago.</p> +<h1 id="getting-help-from-the-community">Getting help from the community<a class="zola-anchor" href="#getting-help-from-the-community" aria-label="Anchor link for: getting-help-from-the-community" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>After <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">upgrading a Gitea intsance from 1.9.6 to 1.16.5</a> the tests conducted manually did not uncover any problem. However, after going to production, some users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser. The person in charge of the upgrade never had to diagnose Gitea problem and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">reached out in the Gitea forum</a>.</p> +<blockquote> +<p><strong>Tip: explain the problem in a public forum as early as possible to get help from the community</strong></p> +</blockquote> +<p>In their post in the forum they explained how they attempted to diagnose the problem and how why they thought that only users created a few years ago were impacted. It was a detailed analysis that was concluded with a partial copy of the logs. It was unfortunately missing <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">key information</a> that was provided only three days later. In the meantime, as they could not figure out the source of the problem, they were on the <strong>verge of <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/11">accepting the loss of all the Gitea database</a> and start over from the repositories</strong>. However, once all the details were available, <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">a workaround</a> was suggested in the forum.</p> +<blockquote> +<p><strong>Tip: focus more on providing detailed facts than exposing the attempted diagnostic</strong></p> +</blockquote> +<p>There was hope to fix Gitea and in the following days they applied the workaround. They also tried to improve it but without success and eventually accepted a <strong>partial data loss</strong> as inevitable and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">reported their success back to the forum</a>.</p> +<blockquote> +<p><strong>Tip: when getting support from the community, providing feedback is the best token of appreciation</strong></p> +</blockquote> +<h1 id="getting-professional-help">Getting professional help<a class="zola-anchor" href="#getting-professional-help" aria-label="Anchor link for: getting-professional-help" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The <a href="https://gna.org/gitea-clinic/">Gna! Clinic</a> is a collective of individual and companies that provides professional services to Gitea admins. They are active members of the Gitea community who <a href="https://discourse.gitea.io/u/dachary/activity">help out</a> as volunteers. They can also be hired to resolve the more complicated cases.</p> +<p>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 <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">proposed their assistance</a> but although <a href="https://discourse.gitea.io/t/user-research-about-gitea-upgrade-experiences-call-for-volunteers/5063/2">well received</a>, it was not accepted.</p> +<p>When the Gitea admin explained how they chose to resolve the problem <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">on the forum</a>, it confirmed the workaround was viable and the root problem was identified. That was enough to figure out a fix for the underlying bug with <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a rather simple patch</a> that was merged <a href="https://github.com/go-gitea/gitea/pull/19629">and backported</a> in the following days. But it happened too late to avoid the data loss.</p> +<p>To summarize with a timeline, here is what happened:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login and a the Gitea admin tries to diagnose the problem</li> +<li>J+2: A message is sent <strong>to ask for help in the community</strong></li> +<li>J+2 to J+6: Three people in the community suggest ideas but <strong>the Gitea admin cannot figure out the root cause and is on the verge of accepting the loss of all Gitea data</strong> and restart from the git repositories</li> +<li>J+6: A <strong>workaround is suggested by the community</strong></li> +<li>J+7 to J+17: The Gitea admin applies the <strong>workaround and only looses part of the Gitea data</strong></li> +</ul> +<p>And in retrospect, here is what could have happened instead:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login</li> +<li>J+1: The Gitea admin <strong><a href="https://gna.org/gitea-clinic/">reaches out to someone at the Gna! Clinic</a></strong></li> +<li>J+2: The <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">logs of the Gitea instance</a> are analyzed, <strong>the root cause diagnosed</strong> and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a patch</a> is created to fix it.</li> +<li>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 <a href="https://github.com/go-gitea/gitea/pull/19629">the backport</a>. The Gitea admin runs the patched Gitea binary in the meantime. <strong>There is no data loss</strong>.</li> +</ul> +<p>It does not mean all upgrade problems can be resolved so easily. But it shows, with an example, that in some cases it makes sense to get professional help.</p> + + + + Project plans for a hosted Gitea online service + 2022-04-18T00:00:00+00:00 + 2022-04-18T00:00:00+00:00 + + https://gna.org/blog/project-plans-for-hosted-gitea-online-service/ + <p><em>This post was originally published on <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">Loïc Dachary's +blog</a>.</em></p> +<hr /> +<p>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, in the same +way they can go to https://discourse.org for a forum, or +https://nextcloud.com for storage. Instead of waiting for that to +happen, <a href="https://batsense.net/about/">Aravinth</a> and +<a href="https://dachary.org/">myself</a> decided to do something about it, in a +way that is in line with our shared values: transparency and Free +Software.</p> +<p>After doing some research we found counter examples that showed the +pitfalls to avoid. GitLab because its business model heavily relies on +selling proprietary licenses. CiviCRM because setting it up is complex +and requires training: users can't figure it out on their own. Gitea +images provided by Digital Ocean because they do not include security +upgrades. MySQL configured and run by AWS because of the vendor lock-in +that makes it impossible to self-host.</p> +<p>We concluded that an online service such as Gitea can be hosted in a +sustainable way as long as:</p> +<ul> +<li>It is well maintained and upgrades itself</li> +<li>It can be self-hosted</li> +<li>The service can automatically be restored from backups when the +underlying resources fail</li> +</ul> +<p>GitHub and GitLab make it look like there is a market around software +forges. It is however impossible to figure out if this market exists +only because it is based on proprietary software. How many of these +customers would pay for a Free Software hosted Gitea instance?</p> +<p>Even if these customers do exist, a new service provider would have to +figure out how to convince them to subscribe. The technical development +of the service can be done within weeks but building a sustainable +business takes much longer. Again, there were examples of what can go +wrong, for instance ElasticSearch. After years of work developing a +successful online service and a customer base, AWS entered the +competition and started to take it away from them.</p> +<p>The sustainability of the Free Software ecosystem is a new and very +difficult problem to solve. It is discussed more than it ever was in the +wake of security breaches originating from widely used and yet abandoned +library or disillusioned Free Software authors self-sabotaging their +next release, and everyone has diverging opinions. It falls on each Free +Software author to spend time to think about their own projects because +there are no handbook or good examples to follow. That is what Aravinth +and myself did to find a semblance of clarity and decide how to go about +this hosted Gitea service idea.</p> +<h1 id="sustaining-free-software-online-services">Sustaining Free Software online services<a class="zola-anchor" href="#sustaining-free-software-online-services" aria-label="Anchor link for: sustaining-free-software-online-services" + ><span class="anchor-icon">#</span></a +> +</h1> +<h2 id="more-mature-online-services-mean-less-opportunities-to-sell-services">More mature online services mean less opportunities to sell services<a class="zola-anchor" href="#more-mature-online-services-mean-less-opportunities-to-sell-services" aria-label="Anchor link for: more-mature-online-services-mean-less-opportunities-to-sell-services" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>Ideally the software running an online service is rock solid and bugs +are so rare that it can run unattended. This is true of +https://wordpress.org and it is not uncommon for an instance to run for +years while upgrading themselves to get security patches. The cost of +maintaining such a service is negligible and hosting companies can offer +it for free to their customers. They make their profit by renting the +machines on which the service runs.</p> +<p>When the software is not as mature, it is more expensive to run. Bugs +need fixing, upgrades require manual intervention, users must be trained +to overcome the complexity of the user experience, etc. Well known +examples are Discourse or CiviCRM for which companies sell services to +overcome these issues.</p> +<p>But when an organization is both the author of the software and the +provider of paid services to compensate for its lack of maturity, it +creates a conflict of interest. Should they focus their effort on making +the software more mature, they would harm a business model that is based +on this very lack of maturity. For instance, if the author of a software +also sells training courses, they are not motivated to solve user +experience issues. If they did, it would lower the need for training +courses and reduce their income.</p> +<h2 id="free-software-online-services-in-the-wake-of-the-sustainability">Free Software online services in the wake of the sustainability<a class="zola-anchor" href="#free-software-online-services-in-the-wake-of-the-sustainability" aria-label="Anchor link for: free-software-online-services-in-the-wake-of-the-sustainability" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>crisis</p> +<p>Nowadays all Free Software authors struggle to get enough resources to +produce a steady stream of releases, even when the project is very +popular. This sustainability problem is getting more and more attention +as the number of Free Software projects in use world wide keeps growing. +Even the simplest online service relies on thousands of Free Software +projects, each of which needs work to keep going. Accidents caused by +poorly maintained Free Software projects become more frequent.</p> +<p>This Free Software sustainability crisis is barely emerging and very +much resembles ecological problems such as climate change. In both cases +it is very difficult to figure out how to properly care for the +resources that are consumed. After decades of advocacy, it is generally +accepted that fossil energy won't last forever but there still is a long +way to go. It will also take a long time for the Free Software community +to answer this simple question: how to sustain an ever growing library +of Free Software?</p> +<p>Luckily, it is relatively simpler to solve that problem for an online +service because it has users. They can be reminded that their assistance +is needed to keep the project afloat, for instance by a donation. A +proposition that would be much more difficult to make for the author of +a cryptographic library. Convincing users to pay for an online service +has the best chance of success when the author of the software is also +the service provider. This is the business model of Discourse and +Weblate, but it is relatively fragile because nothing stands in the way +of the competition.</p> +<p>A few years ago ElasticSearch successfully developed an online service +offering. But when AWS entered the competition and was better at +marketing it, ElasticSearch quickly realized they would likely go out of +business. They tried to fight back by <a href="https://www.elastic.co/blog/licensing-change">changing their +license</a>, which was the +wrong answer to a real problem. Discourse or Weblate are also likely to +face competition from hosting companies in the future and they may not +survive it.</p> +<p>In the end, the durable source of income for a Free Software online +service is to rent the resources (CPU/RAM/network/disk) it needs to run. +In other words only hosting companies can make a profit when running +such an online service. And for that reason they also need to share part +of the profits to ensure the sustainability of the Free Software service +their customers need.</p> +<h1 id="online-services-vendor-lock-in-is-cured-by-free-software">Online services vendor lock-in is cured by Free Software<a class="zola-anchor" href="#online-services-vendor-lock-in-is-cured-by-free-software" aria-label="Anchor link for: online-services-vendor-lock-in-is-cured-by-free-software" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>When hosting companies offer online services they also provide upgrades +and transparent recovery when the hardware fails. But none of them allow +the service to be self-hosted. When their price policy change, or when +the term of services ban users from a given country, migrating the +service elsewhere it costly and difficult. For instance when AWS runs +MySQL for their customers, they allow to download the data but not the +software that runs the proprietary AWS interface used to configure and +control the server. Another example is GitHub where the content of the +git repository can be downloaded but the code that runs GitHub itself is +not Free Software.</p> +<p>If a customer cannot run the same software as their service provider, +they are locked-in, even if they can download their data. It is a common +misconception to think that there is no vendor lock-in as long as it is +possible to download the data in an standard format. Migrating the data +from one software to another is, more often than not, time consuming and +costly to a point that it is effectively a blocker. A GitHub salesperson +would argue that it is possible for people to run GitHub Enterprise on +their own hardware. But the vendor lock-in is still present via the +proprietary license contract. The user experience, maintenance and +upgrades are still exclusively controlled by GitHub.</p> +<p>To guarantee their independence, the customers of an online service need +to be able to:</p> +<ul> +<li>Download their data</li> +<li>Run the exact same Free Software as their service provider</li> +<li>Run the exact same Free Software infrastructure as code as their +service provider</li> +</ul> +<p>The requirement regarding Free Software infrastructure as code refers +to, for instance, the AWS control panel and all that is behind it when +creating a new MySQL service. It includes whatever a competitor would +need to run the same online service. An example would be +https://enough.community, an infrastructure as code dedicated to +creating the services needed by whistleblowers and human rights +defenders. It consumes resources rented by hosting providers, assembles +disks and machines, setup monitoring and intrusion detection, installs +various online services and upgrades them.</p> +<p>The availability of the software that creates the infrastructure is not +only useful to the competitors of a service provider. It also benefits a +non-profit that wants to provide (for instance) Wordpress instances to +its members. Without it they would need to create something from scratch +using building blocks such as CiviCRM. Even though such building blocks +exist, this is a significant undertaking and effectively a blocker.</p> +<h1 id="federated-online-services-and-durability">Federated online services and durability<a class="zola-anchor" href="#federated-online-services-and-durability" aria-label="Anchor link for: federated-online-services-and-durability" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>All self-hosted services are in danger of losing the data they contain. +When a Wordpress service is hosted in a home and the machine dies, it +must be restored from backups... when there are backups. Hosting +companies ensure the durability of the data with their own backup +system. It creates a dilemma for people who are looking into self +hosting: independence is desirable, but is it worth taking the risk of +data loss?</p> +<p>Federated online services do not suffer from this problem, because they +can mirror each other. A Gitea instance that is federated with another +will mirror copies of software projects found on its peers. Should one +instance be destroyed, mirrored projects can be resurrected from the +federated instance. Not only is it a practical way to ensure the (rare) +failure of an entire datacenter, it also helps with the (more frequent) +destruction of self-hosted machines. Contrary to backups that require +special attention, the replication involved in federated online service +is built in and works continuously. There is no need for an extra backup +service that is very rarely used and therefore likely to fail when +needed.</p> +<p>Federated services are not yet mainstream and Gitea is one of the rare +services that started to implement the concept. In the interim, +customers of an online hosting service will need to worry about backups +to ensure the durability of their data. But the ultimate solution for +them won't be the emergence of an ideal backup infrastructure, it will +be replication (via federated services) that will continuously ensure +the durability of their data.</p> +<h1 id="paths-forward">Paths forward<a class="zola-anchor" href="#paths-forward" aria-label="Anchor link for: paths-forward" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The Gitea project itself, following the footsteps of Discourse or +Weblate, could provide a hosting service. Part of its current user base +may become customers and there does not seem to be any blocker to make +that happen. As with most successful Free Software project, people +working on Gitea daily are already very busy and cannot engage in such a +long term project. But Aravinth and myself can, if they will have us.</p> +<p>Another path forward would be to wrap Gitea into a bundle that existing +hosting companies could easily use to provide such a service to their +customers. The biggest hosting companies are unlikely to be interested: +if Digital Ocean was to provide upgrades on top of their existing Gitea +image, they are more likely to rely on their internal staff to implement +that from scratch, as proprietary software integrated into their +existing infrastructure. But smaller hosting companies such as +https://Octopuce.fr or https://Easter-Eggs.com, who already deploy Gitea +instances for their customers, would use it if, for instance, it helped +with the upgrades. They would then kindly be reminded to give back a +share of their profits in order to sustain the development of the +service they deploy.</p> +<p>Finally it would also be possible to follow the example of GitLab in the +early days (before it turned to proprietary software) or Codeberg and +offer a free shared forge hosting service to build a user base. After a +few years, a percentage of the user base would convert to being paid +customers or donors to sustain the activity and part of the income would +be used to sustain the development of the service.</p> + + + diff --git a/tags/gitea/index.html b/tags/gitea/index.html new file mode 100644 index 0000000..71f9e61 --- /dev/null +++ b/tags/gitea/index.html @@ -0,0 +1,560 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gitea | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+ +
+

#gitea

+ + RSS icon +
+ +
+ + + + +
+ + +
+ + diff --git a/tags/gna/atom.xml b/tags/gna/atom.xml new file mode 100644 index 0000000..0bae5ea --- /dev/null +++ b/tags/gna/atom.xml @@ -0,0 +1,720 @@ + + + - gna + + + Zola + 2022-07-20T00:00:00+00:00 + https://gna.org/tags/gna/atom.xml + + 1.17 breaking changes episode 2: preserving a custom gitconfig + 2022-07-20T00:00:00+00:00 + 2022-07-20T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-2/ + <p>On June 21st, 2022 1.17.0-rc1 was published and the location of the gitconfig file moved to a new location, <a href="2022-06-23-1.17-breaking-episode-1">which required manual intervention</a>. This change impacted a large number of Gitea installations because the docker image tag <strong>latest</strong> <a href="https://mastodon.online/@hostea/108514134565401798">was set to 1.17.0-rc1</a> 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.</p> +<p>Unfortunately moving the git home directory in 1.17.0-rc1 was implemented in way that created a security problem. The <a href="https://github.com/go-gitea/gitea/pull/20114">fix that was merged in Gitea</a> to fix it requires moving the gitconfig file and was released July 19th, 2022 in 1.17.0-rc2.</p> +<p>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 <strong>latest</strong> 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.</p> +<p>In 1.17.0-rc2, a custom .gitconfig must be moved manually to the <a href="https://docs.gitea.io/en-us/config-cheat-sheet/#git-git">new git home directory</a> as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Data Root Path</strong>/home (which is <code>/data/gitea/home</code> in the example above).</li> +</ul> + + + + Get a Gitea instance with CI at Gna! + 2022-07-10T00:00:00+00:00 + 2022-07-10T00:00:00+00:00 + + https://gna.org/blog/experimental/ + <p>Hosting a Gitea instance on Gna! is now possible (but still experimental). It is meant to be a minimum viable product: anyone can <a href="https://hosteadashboard.gna.org">create a new dedicated Gitea instance</a> within minutes and pay for it on a monthly basis with a credit card. It includes a dedicated CI based on <a href="https://woodpecker-ci.org/">Woodpecker</a>. 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.</p> +<video width="600" controls> + <source src="https://cloud.forgefriends.org/s/xXLcYpsE469tJEj/download?path=&files=hostea-screencast-vm-create.mp4" type="video/mp4" /> +</video> +<p>The service is 100% infrastructure as code, published as <a href="https://lab.enough.community/main/infrastructure/-/tree/9e18ebbf675c8a65d1585d20b4cf6295af6e52ed/playbooks/hosteadashboard">Ansible playbooks within Enough</a>. It can be self-hosted on bare metal (with <a href="https://libvirt.org/">libvirt</a>) or in the cloud (with <a href="https://www.openstack.org/">OpenStack</a>): follow the <a href="https://enough-community.readthedocs.io/en/latest/introduction.html#quick-start">quick start</a>, configure playbooks for <a href="https://enough-community.readthedocs.io/en/latest/services/hostea.html">hostea</a> and <a href="https://enough-community.readthedocs.io/en/latest/services/hosteadashboard.html">the dashboard</a>.</p> +<p>The organization supporting Gna! is a <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a> of individuals and organizations. The <a href="https://forum.hostea.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<h3 id="the-origin">The origin<a class="zola-anchor" href="#the-origin" aria-label="Anchor link for: the-origin" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In February 2022 the project of running a dedicated Gitea hosting service was <a href="https://discourse.gitea.io/t/a-gitea-hosting-service-under-the-umbrella-of-the-gitea-project/4692">proposed to the Gitea project</a> and other organizations and <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">plans were drafted</a>. After a month of discussions it turned out to not be a <a href="https://blog.dachary.org/2022/03/11/the-inconclusive-story-of-four-failed-project-offers/">good match for any of them</a>.</p> +<p>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.</p> +<h3 id="a-technical-stack-with-no-users">A technical stack with no users<a class="zola-anchor" href="#a-technical-stack-with-no-users" aria-label="Anchor link for: a-technical-stack-with-no-users" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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.</p> +<p>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.</p> +<p>To keep the madness contained and enjoyable, it was decided to set a deadline to July 1st and to <a href="https://gitea.gna.org/Hostea/july-mvp/issues">define precise and realistic technical goals</a>. 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.</p> +<h3 id="a-horizontal-collective-with-a-revenue-sharing-model">A horizontal collective with a revenue sharing model<a class="zola-anchor" href="#a-horizontal-collective-with-a-revenue-sharing-model" aria-label="Anchor link for: a-horizontal-collective-with-a-revenue-sharing-model" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forum.gna.org/c/governance-and-decisions/7">horizontal collective</a>. It feels like a contradiction for a project committed to decentralization to be governed by a centralized organization.</p> +<p>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 <a href="https://forum.gna.org/t/decision-revenue-sharing-model/92">revenue sharing model</a> 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.</p> +<p>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.</p> +<h3 id="dedicated-to-forge-federation">Dedicated to forge federation<a class="zola-anchor" href="#dedicated-to-forge-federation" aria-label="Anchor link for: dedicated-to-forge-federation" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/">forge federation</a>, 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.</p> + + + + 1.17 breaking changes episode 1: preserving a custom gitconfig + 2022-06-22T00:00:00+00:00 + 2022-06-22T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-1/ + <p>Before version 1.17, when Gitea needed to change the <a href="https://git-scm.com/docs/git-config">git configuration</a>, it modified the <code>$HOME/.gitconfig</code> file. For instance it would <a href="https://github.com/go-gitea/gitea/blob/release/v1.16/modules/git/git.go#L174-L177">set core.quotePath to false</a>:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[core] +</span><span> </span><span style="color:#bf616a;">quotePath </span><span>= </span><span style="color:#d08770;">false +</span></code></pre> +<p>When installing Gitea <a href="https://docs.gitea.io/en-us/install-with-docker/">from docker</a> or <a href="https://docs.gitea.io/en-us/install-with-docker-rootless/">rootless</a> or even <a href="https://docs.gitea.io/en-us/install-from-binary/">from binary</a> this <code>$HOME/.gitconfig</code> file belongs to a user that is <a href="https://docs.gitea.io/en-us/install-from-binary/#prepare-environment">dedicated to Gitea</a> and not used by anyone else.</p> +<p>However, if an Gitea installation was done differently and <code>$HOME/.gitconfig</code> 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:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[user] +</span><span> </span><span style="color:#bf616a;">name </span><span>= Jane Doe +</span><span> </span><span style="color:#bf616a;">email </span><span>= jane</span><span style="color:#b48ead;">@doe</span><span>.com +</span></code></pre> +<p>It is also possible that the file was modified manually by the Gitea admin for other reasons. In both there is a <strong>potential for breakage when upgrading to Gitea &gt;= 1.17 because the location of the file changed</strong>. It must be moved manually to the new location as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Repository Root Path</strong> (which is <code>/data/git/repositories</code> in the example above).</li> +</ul> +<p>The reason why this breaking change was introduced is to workaround <a href="https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/">a rare problem</a> impacting Gitea installations relying on networked volumes.</p> + + + + [tutorial] A gentle introduction to the gitea doctor + 2022-06-14T00:00:00+00:00 + 2022-06-14T00:00:00+00:00 + + https://gna.org/blog/gentle-introduction-to-the-doctor/ + <p>While helping people with their upgrades <a href="https://discourse.gitea.io/t/migration-from-1-2-to-1-16-8/5309">in the Gitea forum</a> or <a href="https://forum.gna.org/t/gitea-upgrade-from-1-14-1-to-1-16-8/90">at the Gna! clinic</a>, I realized that few Gitea admins know about the <a href="https://docs.gitea.io/en-us/command-line/#doctor"><code>gitea doctor</code></a> command and decided to write this blog post as a gentle introduction.</p> +<h3 id="an-apple-a-day-keeps-the-doctor-away">An apple a day keeps the doctor away<a class="zola-anchor" href="#an-apple-a-day-keeps-the-doctor-away" aria-label="Anchor link for: an-apple-a-day-keeps-the-doctor-away" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Or in our case, Gitea versions <a href="https://github.com/go-gitea/gitea/blob/v1.11.5/cmd/doctor.go">below 1.11.5</a>. Since then, the <code>gitea doctor</code> 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 <code>gitea doctor</code> was backported to <a href="https://github.com/go-gitea/gitea/blob/v1.10.5/cmd/doctor.go">Gitea 1.10.5</a> and <a href="https://github.com/go-gitea/gitea/blob/v1.10.6/cmd/doctor.go">Gitea 1.10.6</a> and may be of help if you run this particular version and are facing the problem that motivated the backport.</p> +<p>With each version <code>gitea doctor</code> improves and gains new capabilities. For instance, in Gitea 1.17 it becomes aware of <a href="https://github.com/go-gitea/gitea/pull/19731">orphaned pull requests</a> and is able to fix them. If such a problem exists in Gitea 1.16, it does not know about it.</p> +<h3 id="calling-the-doctor">Calling the doctor<a class="zola-anchor" href="#calling-the-doctor" aria-label="Anchor link for: calling-the-doctor" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In the following, examples are based on a Gitea 1.16.8 instance you can run as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker run</span><span style="color:#bf616a;"> --name</span><span> gitea</span><span style="color:#bf616a;"> -p</span><span> 3000:3000</span><span style="color:#bf616a;"> -e</span><span> GITEA__security__INSTALL_LOCK=true</span><span style="color:#bf616a;"> -d</span><span> gitea/gitea:1.16.8-rootless +</span><span style="color:#bf616a;">$</span><span> docker exec gitea gitea admin user create</span><span style="color:#bf616a;"> --admin --username</span><span> root</span><span style="color:#bf616a;"> --password</span><span> admin1234</span><span style="color:#bf616a;"> --email</span><span> root@example.com +</span><span style="color:#bf616a;">$</span><span> docker exec gitea mkdir /var/lib/gitea/data/log +</span></code></pre> +<p>And then you can go to the <a href="https://127.0.0.1:3000/">web interface</a> to create a <code>test</code> repository, with an initial <code>README.md</code> file. When this is done the doctor can be called as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --all +</span><span style="color:#bf616a;">[1]</span><span> Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Configuration File Path: &quot;</span><span style="color:#a3be8c;">/etc/gitea/app.ini</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Repository Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/git/repositories</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Data Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Custom File Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/custom</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Work directory: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Log Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/data/log</span><span>&quot; +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[2]</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[3]</span><span> Check Database Version +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[4]</span><span> Check consistency of database +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[5]</span><span> Check if user with wrong type exist +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[6]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[7]</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> ScriptType bash is on the current PATH at /bin/bash +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[8]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[9]</span><span> Recalculate Stars number for all user +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[10]</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> 0 old archives in repository need to be deleted +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[11]</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[12]</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Found 0 broken repo_units +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[13]</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> 0 PRs with incorrect mergebases of 0 PRs total in 1 repos +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[14]</span><span> Check git-daemon-export-ok files +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span></code></pre> +<h3 id="what-does-the-doctor-know">What does the doctor know?<a class="zola-anchor" href="#what-does-the-doctor-know" aria-label="Anchor link for: what-does-the-doctor-know" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Although the <code>doctor</code> can be compared to <a href="https://en.wikipedia.org/wiki/Fsck">fsck(8)</a>, it does not know everything. It took decades for <code>fsck</code> 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 <code>fsck</code> cannot recover from a data loss.</p> +<p>The first <code>doctor</code> 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:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --list +</span><span style="color:#bf616a;">Default</span><span> Name Title +</span><span style="color:#bf616a;">*</span><span> paths Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">storages</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">*</span><span> check-db-version Check Database Version +</span><span> </span><span style="color:#bf616a;">check-db-consistency</span><span> Check consistency of database +</span><span style="color:#bf616a;">*</span><span> check-user-type Check if user with wrong type exist +</span><span style="color:#bf616a;">*</span><span> authorized-keys Check if OpenSSH authorized_keys file is up-to-date +</span><span> </span><span style="color:#bf616a;">script-type</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">hooks</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">recalculate-stars-number</span><span> Recalculate Stars number for all user +</span><span> </span><span style="color:#bf616a;">check-old-archives</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">enable-push-options</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">fix-broken-repo-units</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">recalculate-merge-bases</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">check-git-daemon-export-ok</span><span> Check git-daemon-export-ok files +</span></code></pre> +<p>And then call the <code>check</code> that looks interesting:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> authorized-keys +</span><span style="color:#bf616a;">[1]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>The challenge is to figure out which <code>check</code> does what and at the moment the best source of information is ... <a href="https://github.com/go-gitea/gitea/tree/v1.16.8">the sources</a> themselves. The <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/cmd/doctor.go">doctor.go</a> command is the entry point and <a href="https://github.com/go-gitea/gitea/tree/v1.16.8/modules/doctor">the doctor directory</a> contains the rest.</p> +<p>Some <code>checks</code> are straightforward to understand, even if you do not know Go, such as <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/modules/doctor/authorizedkeys.go">the authorized-keys check</a>. Others are much more involved and your best chance is to <a href="https://matrix.to/#/#gitea:matrix.org">ask the Gitea chatroom</a> for help.</p> +<h3 id="is-it-going-to-hurt">Is it going to hurt?<a class="zola-anchor" href="#is-it-going-to-hurt" aria-label="Anchor link for: is-it-going-to-hurt" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>By default the doctor (very much like <code>fsck -N</code>) 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 <strong>[I]</strong> (which indicates an information) and <strong>[W]</strong> 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 <strong>[I]</strong>, <a href="https://github.com/go-gitea/gitea/pull/19836">which has been fixed</a> in a more recent version of the doctor.</p> +<p>Now let's do something bad: remove the permissions from a hook in our repository:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea chmod</span><span style="color:#bf616a;"> -x</span><span> /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive +</span></code></pre> +<p>Run the doctor with the <code>check</code> supposed to find that out:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>Ask it to fix this with the <code>--fix</code> flag:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks</span><span style="color:#bf616a;"> --fix +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Regenerated hooks for root/test +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>And run it one last time to check all is well:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>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 <code>doctor.log</code> file in the directory from which it runs. Or it can be displayed on the standard output with <code>--log-file -</code>, which is most convenient when running in docker.</p> +<h3 id="going-further">Going further<a class="zola-anchor" href="#going-further" aria-label="Anchor link for: going-further" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>If that was helpful to you, I would very much appreciate if you <a href="https://mastodon.online/@dachary">send me a message on Mastodon</a>. It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could <a href="https://github.com/go-gitea/gitea/pulls">send a pull request</a> to improve the doctor and help it mature.</p> + + + + [solved] Zombies created by Gitea + 2022-06-04T00:00:00+00:00 + 2022-06-04T00:00:00+00:00 + + https://gna.org/blog/zombies-part-2/ + <p>Gitea can <a href="/blog/zombies">create zombies</a>, for instance if a Git mirror takes too long. When updating a mirror, Gitea relies on the <code>git remote update</code> command which creates a child process, <code>git-remote-https</code>, to fetch data from the remote repository. Gitea has an internal timeout that will kill the child process (e.g. <code>git remote update</code>) 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.</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ time git clone https://4.4.4.4 +</span><span>Clonage dans &#39;4.4.4.4&#39;... +</span><span>fatal: impossible d&#39;accéder à &#39;https://4.4.4.4/&#39;: Failed to connect to 4.4.4.4 port 443: Connexion terminée par expiration du délai d&#39;attente +</span><span> +</span><span>real 2m9,753s +</span><span>user 0m0,001s +</span><span>sys 0m0,009s +</span></code></pre> +<p>As explained in the <a href="/blog/zombies/#killing-a-child-process-and-all-its-children">diagnostic blog post regarding Gitea zombies</a> there fortunately is a very simple way to avoid this by making sure each Gitea child is a <a href="https://en.wikipedia.org/wiki/Process_group">process group leader</a>. That first step was <a href="https://github.com/go-gitea/gitea/pull/19865">introduced in Gitea 1.17</a> and <a href="https://github.com/go-gitea/gitea/pull/19865">backported to Gitea 1.16.9</a>. The actual bug fix can now be implemented.</p> +<h3 id="using-negative-process-id-to-kill-children">Using negative process id to kill children<a class="zola-anchor" href="#using-negative-process-id-to-kill-children" aria-label="Anchor link for: using-negative-process-id-to-kill-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>When Gitea timeout on a child, it relies on <a href="https://github.com/golang/go/blob/f8a53df314e4af8cd350eedb0dae77d4c4fc30d0/src/os/exec/exec.go#L650">os.Process.Kill</a> which translates into a using the kill(2) system call to send a SIGKILL signal to unconditionally terminate it: <code>kill(pid, SIGKILL)</code>. Using a negative pid with <code>kill(-pid, SIGKILL)</code> 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:</p> +<blockquote> +<p>If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.</p> +</blockquote> +<p>Which is implemented as follows in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L130">Friendly Forge Format library</a>:</p> +<blockquote> +<p><code>syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)</code></p> +</blockquote> +<h3 id="not-using-the-default-go-commandcontext">Not using the default Go CommandContext<a class="zola-anchor" href="#not-using-the-default-go-commandcontext" aria-label="Anchor link for: not-using-the-default-go-commandcontext" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Since <a href="https://pkg.go.dev/os/exec#CommandContext">CommandContext</a> 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 <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L75-82">Friendly Forge Format library</a> does it:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> ctxErr := watchCtx(ctx, cmd.Process.Pid) +</span><span> err = cmd.Wait() +</span><span> interruptErr := &lt;-ctxErr +</span><span> // If cmd.Wait returned an error, prefer that. +</span><span> // Otherwise, report any error from the interrupt goroutine. +</span><span> if interruptErr != nil &amp;&amp; err == nil { +</span><span> err = interruptErr +</span><span> } +</span></code></pre> +<h3 id="testing-the-bug-is-fixed-and-stays-fixed">Testing the bug is fixed and stays fixed<a class="zola-anchor" href="#testing-the-bug-is-fixed-and-stays-fixed" aria-label="Anchor link for: testing-the-bug-is-fixed-and-stays-fixed" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Long standing bugs that are difficult to reproduce manually such as this one require robust testing to ensure that:</p> +<ul> +<li>the diagnostic identifying the root cause is correct</li> +<li>the bug fix works</li> +<li>it does not resurface insidiously because of a subtle regression introduce years later</li> +</ul> +<p>It is easy to implement as can be seen in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L44-76">Friendly Forge Format library</a>. In a nutshell:</p> +<ul> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L53">git clone https://4.4.4.4</a> which will hang because of firewall rules</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L60-65">wait for the git-remote-https</a> grandchild process to be spawned</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L67-68">cancel the context and wait for the goroutine to terminate</a></li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L70-75">verify the git-remote-https is killed</a></li> +</ul> +<p>And with that... no more zombies!</p> + + + + [diagnostic] Zombies created by Gitea + 2022-06-02T00:00:00+00:00 + 2022-06-02T00:00:00+00:00 + + https://gna.org/blog/zombies/ + <p>The first <a href="https://github.com/go-gitea/gitea/issues/3242">issue about zombie processes</a> created by Gitea was reported in 2017 and <a href="https://github.com/go-gitea/gitea/issues/13987">resurfaced</a> on a <a href="https://github.com/go-gitea/gitea/issues/19077">regular basis</a>. 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:</p> +<ul> +<li>Gitea updates a mirror by spawning the process <code>git remote update</code></li> +<li><code>git remote update</code> spawns yet another process, <code>git fetch</code></li> +<li><code>git fetch</code> is stuck, for instance because of network problems, and Gitea eventually times out</li> +<li>Gitea kill the process <code>git remote update</code></li> +<li>When killed <code>git remote update</code> does not kill its own child and <code>git fetch</code> becomes an orphaned process which keeps running</li> +<li>When <code>git fetch</code> eventually completes it becomes a zombie because its original parent is no longer around to wait on it</li> +</ul> +<h3 id="pid-1-process-and-waiting-on-orphans">PID 1 process and waiting on orphans<a class="zola-anchor" href="#pid-1-process-and-waiting-on-orphans" aria-label="Anchor link for: pid-1-process-and-waiting-on-orphans" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <code>/bin/init</code> and when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile">default docker image</a> this is <code>s6</code>: they will both wait on orphaned processes and there won't be any zombies.</p> +<h3 id="what-if-gitea-is-the-only-running-process">What if Gitea is the only running process?<a class="zola-anchor" href="#what-if-gitea-is-the-only-running-process" aria-label="Anchor link for: what-if-gitea-is-the-only-running-process" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>But when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile.rootless">rootless docker image</a>, 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:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker run --name gitea -p 8080:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless +</span><span>$ docker exec --user 1000 gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com +</span></code></pre> +<p>The <code>git</code> command can then be replaced with a script that waits forever:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ ( echo -e &#39;#!/bin/bash\nsleep infinity&#39; ) | docker exec -i --user root gitea tee /usr/bin/git +</span><span>$ docker exec --user root gitea chmod +x /usr/bin/git +</span></code></pre> +<p>Trying to create a repository from the web interface will create the conditions for a zombie to show:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 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 +</span><span> 164 165 sleep sleep infinity +</span></code></pre> +<p>When the <code>git</code> process is killed by Gitea, the <code>sleep</code> child will be orphaned:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep sleep infinity +</span></code></pre> +<p>Killing it will turn it into a zombie:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea kill 165 +</span><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep [sleep] +</span></code></pre> +<h3 id="killing-a-child-process-and-all-its-children">Killing a child process and all its children<a class="zola-anchor" href="#killing-a-child-process-and-all-its-children" aria-label="Anchor link for: killing-a-child-process-and-all-its-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://en.wikipedia.org/wiki/Process_group">process group leaders</a>. In a nutshell it means that when the child is killed all its children and grand children are also killed.</p> + + + + [solved] Gitea 1.15 and up: path not found or permission denied + 2022-05-28T00:00:00+00:00 + 2022-05-28T00:00:00+00:00 + + https://gna.org/blog/path-not-found/ + <p>In Gitea 1.15 the <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/custom/conf/app.example.ini">app.example.ini</a> file was changed to <a href="https://github.com/go-gitea/gitea/commit/4a84022d2559ccfc99960c7c654ee8b9b38664f7">comment out most of the values</a>. The assumption was that all values exactly matched the defaults <a href="https://github.com/go-gitea/gitea/blob/main/modules/setting/setting.go">in the source code</a>. However, there are differences, for instance for <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/modules/setting/setting.go#L771">APP_DATA_PATH</a>. Before Gitea 1.15, <code>app.example.ini</code> contained:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>directory from which the Gitea server was running</strong>. In Gitea 1.15 up to 1.16, it was commented out:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. </p> +<p>When a distribution such as voidlinux <a href="https://github.com/void-linux/void-packages/blob/master/srcpkgs/gitea/patches/config.patch">uses app.example.ini</a> as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea <a href="https://github.com/go-gitea/gitea/issues/19367">fails with errors</a> such as <code>unable to open level db at data/data/queues/common: mkdir data: permission denied</code>. The regression did not show as soon as Gitea 1.15 became available in voidlinux because the package <a href="https://github.com/void-linux/void-packages/blob/7fc9190f0e0d557dd5031e68df4e183892d4315b/srcpkgs/gitea/patches/config.patch#L62">explicitly set <code>APP_DATA_PATH</code></a>. But this <a href="https://github.com/void-linux/void-packages/commit/19d986a2cae9ce73d32552ddb62443b5e7fa13e2">changed when Gitea 1.15.6 was packaged</a> and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the <a href="https://github.com/void-linux/void-packages/commit/44b6c96fa12ce9d993c7a2ac9486d892735b7e3a">Gitea 1.16.8</a> package.</p> +<p>The <code>APP_DATA_PATH</code> directory is not the only one, the <code>[log] ROOT_PATH</code> is another example. There is an <a href="https://github.com/go-gitea/gitea/pull/19815">ongoing effort</a> 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 <code>app.ini</code> file will be interpreted differently. In the case of <code>APP_DATA_PATH</code>, both:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>will be interpreted to be relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. Every Gitea installation using <strong>APP_DATA_PATH = data</strong> will need to update the value to be an absolute path such as <strong>/var/lib/gitea/data</strong> so that it keeps pointing to the expected directory.</p> +<p>In order to prepare for the change or ensure the consistency of all path, there fortunately is a very simple <strong>solution: always use absolute paths in the <code>app.ini</code> configuration file</strong>.</p> + + + + [solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else + 2022-05-15T00:00:00+00:00 + 2022-05-15T00:00:00+00:00 + + https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/ + <p>April 12, 2022 version <a href="https://lore.kernel.org/git/xmqqv8veb5i6.fsf@gitster.g/">git v2.35.2</a> was released and addresses a security issue <a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a>. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as <a href="https://security-tracker.debian.org/tracker/CVE-2022-24765">Debian GNU/Linux</a>, <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<p><strong>If Gitea runs as user <code>foo</code>, calls a patched Git version and a parent directory of the git repositories is owned by a user other than <code>foo</code>, it will fail</strong> with a message such as:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>Failed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository (&#39;/data/git/repositories/git/data.git&#39; is owned by someone else) +</span></code></pre> +<p>This started to show in the past few weeks to <a href="https://github.com/go-gitea/gitea/issues/19455">users running the Gitea binary on Windows</a> who also independently installed git v2.36. And then to people running <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106331149">Gitea from snap</a>, on <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106312061">a Synology NAS</a> and then people running from <a href="https://github.com/go-gitea/gitea/blob/main/Dockerfile#L2">Gitea docker images</a> which is based on <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<h3 id="workarounds">Workarounds<a class="zola-anchor" href="#workarounds" aria-label="Anchor link for: workarounds" + ><span class="anchor-icon">#</span></a +> +</h3> +<ul> +<li>If using <a href="https://hub.docker.com/r/gitea/gitea">Gitea docker images</a>: +<ul> +<li>upgrade to <a href="https://github.com/go-gitea/gitea/pull/19876">Gitea &gt;=1.16.9</a> or 1.17, both have git &gt;=2.36</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +<li>If the Gitea binary was installed independently of git, upgrade git to a version that is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a> and disable the security check entirely with: +<ul> +<li>impersonate the <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">user dedicated to Gitea</a> (usually git)</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +</ul> +<h3 id="bug-fix">Bug fix<a class="zola-anchor" href="#bug-fix" aria-label="Anchor link for: bug-fix" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>The <a href="https://github.com/go-gitea/gitea/pull/19870">bug fix</a> is for Gitea to ensure <code>git config --global --replace-all safe.directory '*'</code> is set on its <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">dedicated user</a> when it initializes. It is effective on the condition that the git CLI version is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a>.</p> +<h3 id="bug-fix-rationale">Bug fix rationale<a class="zola-anchor" href="#bug-fix-rationale" aria-label="Anchor link for: bug-fix-rationale" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>It is safe to <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs">disable the security check in Gitea</a>. It is not vulnerable to <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong> because it calls the git CLI <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/command.go#L160">after changing its working directory</a> to be the git repository targeted by the command (for instance <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/diff.go#L38-L45">diff</a>) or a temporary directory. Therefore <strong>it will not explore the parent directories looking for a git configuration file</strong>.</p> +<p>The security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and <strong>not because a parent directory is owned by an unexpected user</strong>. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong>.</p> +<p>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.</p> +<p>Gitea runs under a dedicated user, either when installed <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">from binary</a> or from <a href="https://docs.gitea.io/en-us/install-with-docker/">docker</a> and <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/git.go#L196-L207">modifies the global git configuration</a> depending on the git version at initialization time. Fixing the problem can therefore be done by <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#bcd72ff867cbd1ddd5b6518c3a05b5f1a6021286_209_209">disabling the security check in the global git config file at initialization time</a>. It also requires a minimum version of git 2.36 to be installed, which is the case for Gitea docker images with <a href="https://github.com/go-gitea/gitea/pull/19876">versions &gt;= 1.16.9</a>.</p> + + + + [solved] blank or error 500 page after login + 2022-05-08T00:00:00+00:00 + 2022-05-08T00:00:00+00:00 + + https://gna.org/blog/blank-or-error-500-page-after-login/ + <p>The <a href="https://docs.gitea.io/en-us/upgrade-from-gitea/#upgrade-from-binary">instructions to upgrade a Gitea instance</a> only require three to four steps. They work fine most of the time but the documentation is lacking a &quot;Troubleshooting&quot; 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.</p> +<p>An <a href="https://forum.gna.org/t/things-to-know-about-gitea-upgrades/39">inventory of the known upgrade issues</a> was started to figure out how to structure such a section in the documentation. The <a href="https://blog.gitea.io/">release notes</a> were analyzed all the way back to <a href="https://github.com/go-gitea/gitea/releases/tag/v1.9.6">Gitea 1.9.6</a> and the work is still in progress. Here is a sample of the tips that will be included:</p> +<ul> +<li>Upgrade directly to the latest Gitea version, there is no need to upgrade to intermediate versions.</li> +<li>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.</li> +<li>etc.</li> +</ul> +<p>However, even with the best documentation, someone will eventually <strong>run into an new problem</strong> and fixing it without compromising the integrity of the data will be challenging. This is best demonstrated by a real world example that was concluded a few days ago.</p> +<h1 id="getting-help-from-the-community">Getting help from the community<a class="zola-anchor" href="#getting-help-from-the-community" aria-label="Anchor link for: getting-help-from-the-community" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>After <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">upgrading a Gitea intsance from 1.9.6 to 1.16.5</a> the tests conducted manually did not uncover any problem. However, after going to production, some users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser. The person in charge of the upgrade never had to diagnose Gitea problem and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">reached out in the Gitea forum</a>.</p> +<blockquote> +<p><strong>Tip: explain the problem in a public forum as early as possible to get help from the community</strong></p> +</blockquote> +<p>In their post in the forum they explained how they attempted to diagnose the problem and how why they thought that only users created a few years ago were impacted. It was a detailed analysis that was concluded with a partial copy of the logs. It was unfortunately missing <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">key information</a> that was provided only three days later. In the meantime, as they could not figure out the source of the problem, they were on the <strong>verge of <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/11">accepting the loss of all the Gitea database</a> and start over from the repositories</strong>. However, once all the details were available, <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">a workaround</a> was suggested in the forum.</p> +<blockquote> +<p><strong>Tip: focus more on providing detailed facts than exposing the attempted diagnostic</strong></p> +</blockquote> +<p>There was hope to fix Gitea and in the following days they applied the workaround. They also tried to improve it but without success and eventually accepted a <strong>partial data loss</strong> as inevitable and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">reported their success back to the forum</a>.</p> +<blockquote> +<p><strong>Tip: when getting support from the community, providing feedback is the best token of appreciation</strong></p> +</blockquote> +<h1 id="getting-professional-help">Getting professional help<a class="zola-anchor" href="#getting-professional-help" aria-label="Anchor link for: getting-professional-help" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The <a href="https://gna.org/gitea-clinic/">Gna! Clinic</a> is a collective of individual and companies that provides professional services to Gitea admins. They are active members of the Gitea community who <a href="https://discourse.gitea.io/u/dachary/activity">help out</a> as volunteers. They can also be hired to resolve the more complicated cases.</p> +<p>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 <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">proposed their assistance</a> but although <a href="https://discourse.gitea.io/t/user-research-about-gitea-upgrade-experiences-call-for-volunteers/5063/2">well received</a>, it was not accepted.</p> +<p>When the Gitea admin explained how they chose to resolve the problem <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">on the forum</a>, it confirmed the workaround was viable and the root problem was identified. That was enough to figure out a fix for the underlying bug with <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a rather simple patch</a> that was merged <a href="https://github.com/go-gitea/gitea/pull/19629">and backported</a> in the following days. But it happened too late to avoid the data loss.</p> +<p>To summarize with a timeline, here is what happened:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login and a the Gitea admin tries to diagnose the problem</li> +<li>J+2: A message is sent <strong>to ask for help in the community</strong></li> +<li>J+2 to J+6: Three people in the community suggest ideas but <strong>the Gitea admin cannot figure out the root cause and is on the verge of accepting the loss of all Gitea data</strong> and restart from the git repositories</li> +<li>J+6: A <strong>workaround is suggested by the community</strong></li> +<li>J+7 to J+17: The Gitea admin applies the <strong>workaround and only looses part of the Gitea data</strong></li> +</ul> +<p>And in retrospect, here is what could have happened instead:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login</li> +<li>J+1: The Gitea admin <strong><a href="https://gna.org/gitea-clinic/">reaches out to someone at the Gna! Clinic</a></strong></li> +<li>J+2: The <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">logs of the Gitea instance</a> are analyzed, <strong>the root cause diagnosed</strong> and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a patch</a> is created to fix it.</li> +<li>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 <a href="https://github.com/go-gitea/gitea/pull/19629">the backport</a>. The Gitea admin runs the patched Gitea binary in the meantime. <strong>There is no data loss</strong>.</li> +</ul> +<p>It does not mean all upgrade problems can be resolved so easily. But it shows, with an example, that in some cases it makes sense to get professional help.</p> + + + + Project plans for a hosted Gitea online service + 2022-04-18T00:00:00+00:00 + 2022-04-18T00:00:00+00:00 + + https://gna.org/blog/project-plans-for-hosted-gitea-online-service/ + <p><em>This post was originally published on <a href="https://blog.dachary.org/2022/02/16/project-plans-for-a-hosted-gitea-online-service/">Loïc Dachary's +blog</a>.</em></p> +<hr /> +<p>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, in the same +way they can go to https://discourse.org for a forum, or +https://nextcloud.com for storage. Instead of waiting for that to +happen, <a href="https://batsense.net/about/">Aravinth</a> and +<a href="https://dachary.org/">myself</a> decided to do something about it, in a +way that is in line with our shared values: transparency and Free +Software.</p> +<p>After doing some research we found counter examples that showed the +pitfalls to avoid. GitLab because its business model heavily relies on +selling proprietary licenses. CiviCRM because setting it up is complex +and requires training: users can't figure it out on their own. Gitea +images provided by Digital Ocean because they do not include security +upgrades. MySQL configured and run by AWS because of the vendor lock-in +that makes it impossible to self-host.</p> +<p>We concluded that an online service such as Gitea can be hosted in a +sustainable way as long as:</p> +<ul> +<li>It is well maintained and upgrades itself</li> +<li>It can be self-hosted</li> +<li>The service can automatically be restored from backups when the +underlying resources fail</li> +</ul> +<p>GitHub and GitLab make it look like there is a market around software +forges. It is however impossible to figure out if this market exists +only because it is based on proprietary software. How many of these +customers would pay for a Free Software hosted Gitea instance?</p> +<p>Even if these customers do exist, a new service provider would have to +figure out how to convince them to subscribe. The technical development +of the service can be done within weeks but building a sustainable +business takes much longer. Again, there were examples of what can go +wrong, for instance ElasticSearch. After years of work developing a +successful online service and a customer base, AWS entered the +competition and started to take it away from them.</p> +<p>The sustainability of the Free Software ecosystem is a new and very +difficult problem to solve. It is discussed more than it ever was in the +wake of security breaches originating from widely used and yet abandoned +library or disillusioned Free Software authors self-sabotaging their +next release, and everyone has diverging opinions. It falls on each Free +Software author to spend time to think about their own projects because +there are no handbook or good examples to follow. That is what Aravinth +and myself did to find a semblance of clarity and decide how to go about +this hosted Gitea service idea.</p> +<h1 id="sustaining-free-software-online-services">Sustaining Free Software online services<a class="zola-anchor" href="#sustaining-free-software-online-services" aria-label="Anchor link for: sustaining-free-software-online-services" + ><span class="anchor-icon">#</span></a +> +</h1> +<h2 id="more-mature-online-services-mean-less-opportunities-to-sell-services">More mature online services mean less opportunities to sell services<a class="zola-anchor" href="#more-mature-online-services-mean-less-opportunities-to-sell-services" aria-label="Anchor link for: more-mature-online-services-mean-less-opportunities-to-sell-services" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>Ideally the software running an online service is rock solid and bugs +are so rare that it can run unattended. This is true of +https://wordpress.org and it is not uncommon for an instance to run for +years while upgrading themselves to get security patches. The cost of +maintaining such a service is negligible and hosting companies can offer +it for free to their customers. They make their profit by renting the +machines on which the service runs.</p> +<p>When the software is not as mature, it is more expensive to run. Bugs +need fixing, upgrades require manual intervention, users must be trained +to overcome the complexity of the user experience, etc. Well known +examples are Discourse or CiviCRM for which companies sell services to +overcome these issues.</p> +<p>But when an organization is both the author of the software and the +provider of paid services to compensate for its lack of maturity, it +creates a conflict of interest. Should they focus their effort on making +the software more mature, they would harm a business model that is based +on this very lack of maturity. For instance, if the author of a software +also sells training courses, they are not motivated to solve user +experience issues. If they did, it would lower the need for training +courses and reduce their income.</p> +<h2 id="free-software-online-services-in-the-wake-of-the-sustainability">Free Software online services in the wake of the sustainability<a class="zola-anchor" href="#free-software-online-services-in-the-wake-of-the-sustainability" aria-label="Anchor link for: free-software-online-services-in-the-wake-of-the-sustainability" + ><span class="anchor-icon">#</span></a +> +</h2> +<p>crisis</p> +<p>Nowadays all Free Software authors struggle to get enough resources to +produce a steady stream of releases, even when the project is very +popular. This sustainability problem is getting more and more attention +as the number of Free Software projects in use world wide keeps growing. +Even the simplest online service relies on thousands of Free Software +projects, each of which needs work to keep going. Accidents caused by +poorly maintained Free Software projects become more frequent.</p> +<p>This Free Software sustainability crisis is barely emerging and very +much resembles ecological problems such as climate change. In both cases +it is very difficult to figure out how to properly care for the +resources that are consumed. After decades of advocacy, it is generally +accepted that fossil energy won't last forever but there still is a long +way to go. It will also take a long time for the Free Software community +to answer this simple question: how to sustain an ever growing library +of Free Software?</p> +<p>Luckily, it is relatively simpler to solve that problem for an online +service because it has users. They can be reminded that their assistance +is needed to keep the project afloat, for instance by a donation. A +proposition that would be much more difficult to make for the author of +a cryptographic library. Convincing users to pay for an online service +has the best chance of success when the author of the software is also +the service provider. This is the business model of Discourse and +Weblate, but it is relatively fragile because nothing stands in the way +of the competition.</p> +<p>A few years ago ElasticSearch successfully developed an online service +offering. But when AWS entered the competition and was better at +marketing it, ElasticSearch quickly realized they would likely go out of +business. They tried to fight back by <a href="https://www.elastic.co/blog/licensing-change">changing their +license</a>, which was the +wrong answer to a real problem. Discourse or Weblate are also likely to +face competition from hosting companies in the future and they may not +survive it.</p> +<p>In the end, the durable source of income for a Free Software online +service is to rent the resources (CPU/RAM/network/disk) it needs to run. +In other words only hosting companies can make a profit when running +such an online service. And for that reason they also need to share part +of the profits to ensure the sustainability of the Free Software service +their customers need.</p> +<h1 id="online-services-vendor-lock-in-is-cured-by-free-software">Online services vendor lock-in is cured by Free Software<a class="zola-anchor" href="#online-services-vendor-lock-in-is-cured-by-free-software" aria-label="Anchor link for: online-services-vendor-lock-in-is-cured-by-free-software" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>When hosting companies offer online services they also provide upgrades +and transparent recovery when the hardware fails. But none of them allow +the service to be self-hosted. When their price policy change, or when +the term of services ban users from a given country, migrating the +service elsewhere it costly and difficult. For instance when AWS runs +MySQL for their customers, they allow to download the data but not the +software that runs the proprietary AWS interface used to configure and +control the server. Another example is GitHub where the content of the +git repository can be downloaded but the code that runs GitHub itself is +not Free Software.</p> +<p>If a customer cannot run the same software as their service provider, +they are locked-in, even if they can download their data. It is a common +misconception to think that there is no vendor lock-in as long as it is +possible to download the data in an standard format. Migrating the data +from one software to another is, more often than not, time consuming and +costly to a point that it is effectively a blocker. A GitHub salesperson +would argue that it is possible for people to run GitHub Enterprise on +their own hardware. But the vendor lock-in is still present via the +proprietary license contract. The user experience, maintenance and +upgrades are still exclusively controlled by GitHub.</p> +<p>To guarantee their independence, the customers of an online service need +to be able to:</p> +<ul> +<li>Download their data</li> +<li>Run the exact same Free Software as their service provider</li> +<li>Run the exact same Free Software infrastructure as code as their +service provider</li> +</ul> +<p>The requirement regarding Free Software infrastructure as code refers +to, for instance, the AWS control panel and all that is behind it when +creating a new MySQL service. It includes whatever a competitor would +need to run the same online service. An example would be +https://enough.community, an infrastructure as code dedicated to +creating the services needed by whistleblowers and human rights +defenders. It consumes resources rented by hosting providers, assembles +disks and machines, setup monitoring and intrusion detection, installs +various online services and upgrades them.</p> +<p>The availability of the software that creates the infrastructure is not +only useful to the competitors of a service provider. It also benefits a +non-profit that wants to provide (for instance) Wordpress instances to +its members. Without it they would need to create something from scratch +using building blocks such as CiviCRM. Even though such building blocks +exist, this is a significant undertaking and effectively a blocker.</p> +<h1 id="federated-online-services-and-durability">Federated online services and durability<a class="zola-anchor" href="#federated-online-services-and-durability" aria-label="Anchor link for: federated-online-services-and-durability" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>All self-hosted services are in danger of losing the data they contain. +When a Wordpress service is hosted in a home and the machine dies, it +must be restored from backups... when there are backups. Hosting +companies ensure the durability of the data with their own backup +system. It creates a dilemma for people who are looking into self +hosting: independence is desirable, but is it worth taking the risk of +data loss?</p> +<p>Federated online services do not suffer from this problem, because they +can mirror each other. A Gitea instance that is federated with another +will mirror copies of software projects found on its peers. Should one +instance be destroyed, mirrored projects can be resurrected from the +federated instance. Not only is it a practical way to ensure the (rare) +failure of an entire datacenter, it also helps with the (more frequent) +destruction of self-hosted machines. Contrary to backups that require +special attention, the replication involved in federated online service +is built in and works continuously. There is no need for an extra backup +service that is very rarely used and therefore likely to fail when +needed.</p> +<p>Federated services are not yet mainstream and Gitea is one of the rare +services that started to implement the concept. In the interim, +customers of an online hosting service will need to worry about backups +to ensure the durability of their data. But the ultimate solution for +them won't be the emergence of an ideal backup infrastructure, it will +be replication (via federated services) that will continuously ensure +the durability of their data.</p> +<h1 id="paths-forward">Paths forward<a class="zola-anchor" href="#paths-forward" aria-label="Anchor link for: paths-forward" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The Gitea project itself, following the footsteps of Discourse or +Weblate, could provide a hosting service. Part of its current user base +may become customers and there does not seem to be any blocker to make +that happen. As with most successful Free Software project, people +working on Gitea daily are already very busy and cannot engage in such a +long term project. But Aravinth and myself can, if they will have us.</p> +<p>Another path forward would be to wrap Gitea into a bundle that existing +hosting companies could easily use to provide such a service to their +customers. The biggest hosting companies are unlikely to be interested: +if Digital Ocean was to provide upgrades on top of their existing Gitea +image, they are more likely to rely on their internal staff to implement +that from scratch, as proprietary software integrated into their +existing infrastructure. But smaller hosting companies such as +https://Octopuce.fr or https://Easter-Eggs.com, who already deploy Gitea +instances for their customers, would use it if, for instance, it helped +with the upgrades. They would then kindly be reminded to give back a +share of their profits in order to sustain the development of the +service they deploy.</p> +<p>Finally it would also be possible to follow the example of GitLab in the +early days (before it turned to proprietary software) or Codeberg and +offer a free shared forge hosting service to build a user base. After a +few years, a percentage of the user base would convert to being paid +customers or donors to sustain the activity and part of the income would +be used to sustain the development of the service.</p> + + + diff --git a/tags/gna/index.html b/tags/gna/index.html new file mode 100644 index 0000000..e2ee678 --- /dev/null +++ b/tags/gna/index.html @@ -0,0 +1,560 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gna | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+ +
+

#gna

+ + RSS icon +
+ +
+ + + + +
+ + +
+ + diff --git a/tags/hostea/atom.xml b/tags/hostea/atom.xml new file mode 100644 index 0000000..ad0feb0 --- /dev/null +++ b/tags/hostea/atom.xml @@ -0,0 +1,47 @@ + + + - hostea + + + Zola + 2022-04-22T00:00:00+00:00 + https://gna.org/tags/hostea/atom.xml + + Introducing Gna! + 2022-04-22T00:00:00+00:00 + 2022-04-22T00:00:00+00:00 + + https://gna.org/blog/22-04-2022-hostea-introducing-hostea-forgefriends-monthly-meet/ + <p>Introducing <a href="https://gna.org">Hostea</a>, a project <a href="https://dachary.org">Loïc +Dachary</a> and <a href="https://batsense.net">Aravinth +Manivannan</a> are working on to create a full Free +software development suite based on +<a href="https://gitea.io">Gitea</a> for the forge, <a href="https://woodpecker-ci.org">Woodpecker +CI</a> for CI/CD, +<a href="https://github.com/realaravinth/pages">Pages</a> for static sites and +<a href="https://gitpad.org">GitPad</a> for gists.</p> +<p>This talk introduces the projects goals and philosophy behind the +project.</p> +<p>Please see +<a href="https://forum.forgefriends.org/t/forgefriends-monthly-update-april-22st-2022-5pm-6pm-utc-2/673">here</a> +to learn more about the event.</p> +<h2 id="details">Details<a class="zola-anchor" href="#details" aria-label="Anchor link for: details" + ><span class="anchor-icon">#</span></a +> +</h2> +<ul> +<li><strong>organised by:</strong> <a href="https://forgefriends.org">forgefriends.org</a></li> +<li><strong>date:</strong> 2022<sup>th</sup> April, 2022</li> +<li><strong>venue:</strong> Online</li> +</ul> +<h2 id="resources">Resources<a class="zola-anchor" href="#resources" aria-label="Anchor link for: resources" + ><span class="anchor-icon">#</span></a +> +</h2> +<ul> +<li><a href="./slides/2022-04-22-forgefriends-introducing-hostea.odp">slides(ODP)</a></li> +<li><a href="./slides/2022-04-22-forgefriends-introducing-hostea.pdf">slides(PDF)</a></li> +</ul> + + + diff --git a/tags/hostea/index.html b/tags/hostea/index.html new file mode 100644 index 0000000..c1a8c50 --- /dev/null +++ b/tags/hostea/index.html @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hostea | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..94b4625 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,485 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tags | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + diff --git a/tags/problem/atom.xml b/tags/problem/atom.xml new file mode 100644 index 0000000..5c5e073 --- /dev/null +++ b/tags/problem/atom.xml @@ -0,0 +1,452 @@ + + + - problem + + + Zola + 2022-07-20T00:00:00+00:00 + https://gna.org/tags/problem/atom.xml + + 1.17 breaking changes episode 2: preserving a custom gitconfig + 2022-07-20T00:00:00+00:00 + 2022-07-20T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-2/ + <p>On June 21st, 2022 1.17.0-rc1 was published and the location of the gitconfig file moved to a new location, <a href="2022-06-23-1.17-breaking-episode-1">which required manual intervention</a>. This change impacted a large number of Gitea installations because the docker image tag <strong>latest</strong> <a href="https://mastodon.online/@hostea/108514134565401798">was set to 1.17.0-rc1</a> 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.</p> +<p>Unfortunately moving the git home directory in 1.17.0-rc1 was implemented in way that created a security problem. The <a href="https://github.com/go-gitea/gitea/pull/20114">fix that was merged in Gitea</a> to fix it requires moving the gitconfig file and was released July 19th, 2022 in 1.17.0-rc2.</p> +<p>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 <strong>latest</strong> 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.</p> +<p>In 1.17.0-rc2, a custom .gitconfig must be moved manually to the <a href="https://docs.gitea.io/en-us/config-cheat-sheet/#git-git">new git home directory</a> as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Data Root Path</strong>/home (which is <code>/data/gitea/home</code> in the example above).</li> +</ul> + + + + 1.17 breaking changes episode 1: preserving a custom gitconfig + 2022-06-22T00:00:00+00:00 + 2022-06-22T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-1/ + <p>Before version 1.17, when Gitea needed to change the <a href="https://git-scm.com/docs/git-config">git configuration</a>, it modified the <code>$HOME/.gitconfig</code> file. For instance it would <a href="https://github.com/go-gitea/gitea/blob/release/v1.16/modules/git/git.go#L174-L177">set core.quotePath to false</a>:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[core] +</span><span> </span><span style="color:#bf616a;">quotePath </span><span>= </span><span style="color:#d08770;">false +</span></code></pre> +<p>When installing Gitea <a href="https://docs.gitea.io/en-us/install-with-docker/">from docker</a> or <a href="https://docs.gitea.io/en-us/install-with-docker-rootless/">rootless</a> or even <a href="https://docs.gitea.io/en-us/install-from-binary/">from binary</a> this <code>$HOME/.gitconfig</code> file belongs to a user that is <a href="https://docs.gitea.io/en-us/install-from-binary/#prepare-environment">dedicated to Gitea</a> and not used by anyone else.</p> +<p>However, if an Gitea installation was done differently and <code>$HOME/.gitconfig</code> 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:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[user] +</span><span> </span><span style="color:#bf616a;">name </span><span>= Jane Doe +</span><span> </span><span style="color:#bf616a;">email </span><span>= jane</span><span style="color:#b48ead;">@doe</span><span>.com +</span></code></pre> +<p>It is also possible that the file was modified manually by the Gitea admin for other reasons. In both there is a <strong>potential for breakage when upgrading to Gitea &gt;= 1.17 because the location of the file changed</strong>. It must be moved manually to the new location as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Repository Root Path</strong> (which is <code>/data/git/repositories</code> in the example above).</li> +</ul> +<p>The reason why this breaking change was introduced is to workaround <a href="https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/">a rare problem</a> impacting Gitea installations relying on networked volumes.</p> + + + + [tutorial] A gentle introduction to the gitea doctor + 2022-06-14T00:00:00+00:00 + 2022-06-14T00:00:00+00:00 + + https://gna.org/blog/gentle-introduction-to-the-doctor/ + <p>While helping people with their upgrades <a href="https://discourse.gitea.io/t/migration-from-1-2-to-1-16-8/5309">in the Gitea forum</a> or <a href="https://forum.gna.org/t/gitea-upgrade-from-1-14-1-to-1-16-8/90">at the Gna! clinic</a>, I realized that few Gitea admins know about the <a href="https://docs.gitea.io/en-us/command-line/#doctor"><code>gitea doctor</code></a> command and decided to write this blog post as a gentle introduction.</p> +<h3 id="an-apple-a-day-keeps-the-doctor-away">An apple a day keeps the doctor away<a class="zola-anchor" href="#an-apple-a-day-keeps-the-doctor-away" aria-label="Anchor link for: an-apple-a-day-keeps-the-doctor-away" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Or in our case, Gitea versions <a href="https://github.com/go-gitea/gitea/blob/v1.11.5/cmd/doctor.go">below 1.11.5</a>. Since then, the <code>gitea doctor</code> 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 <code>gitea doctor</code> was backported to <a href="https://github.com/go-gitea/gitea/blob/v1.10.5/cmd/doctor.go">Gitea 1.10.5</a> and <a href="https://github.com/go-gitea/gitea/blob/v1.10.6/cmd/doctor.go">Gitea 1.10.6</a> and may be of help if you run this particular version and are facing the problem that motivated the backport.</p> +<p>With each version <code>gitea doctor</code> improves and gains new capabilities. For instance, in Gitea 1.17 it becomes aware of <a href="https://github.com/go-gitea/gitea/pull/19731">orphaned pull requests</a> and is able to fix them. If such a problem exists in Gitea 1.16, it does not know about it.</p> +<h3 id="calling-the-doctor">Calling the doctor<a class="zola-anchor" href="#calling-the-doctor" aria-label="Anchor link for: calling-the-doctor" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In the following, examples are based on a Gitea 1.16.8 instance you can run as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker run</span><span style="color:#bf616a;"> --name</span><span> gitea</span><span style="color:#bf616a;"> -p</span><span> 3000:3000</span><span style="color:#bf616a;"> -e</span><span> GITEA__security__INSTALL_LOCK=true</span><span style="color:#bf616a;"> -d</span><span> gitea/gitea:1.16.8-rootless +</span><span style="color:#bf616a;">$</span><span> docker exec gitea gitea admin user create</span><span style="color:#bf616a;"> --admin --username</span><span> root</span><span style="color:#bf616a;"> --password</span><span> admin1234</span><span style="color:#bf616a;"> --email</span><span> root@example.com +</span><span style="color:#bf616a;">$</span><span> docker exec gitea mkdir /var/lib/gitea/data/log +</span></code></pre> +<p>And then you can go to the <a href="https://127.0.0.1:3000/">web interface</a> to create a <code>test</code> repository, with an initial <code>README.md</code> file. When this is done the doctor can be called as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --all +</span><span style="color:#bf616a;">[1]</span><span> Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Configuration File Path: &quot;</span><span style="color:#a3be8c;">/etc/gitea/app.ini</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Repository Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/git/repositories</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Data Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Custom File Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/custom</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Work directory: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Log Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/data/log</span><span>&quot; +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[2]</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[3]</span><span> Check Database Version +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[4]</span><span> Check consistency of database +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[5]</span><span> Check if user with wrong type exist +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[6]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[7]</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> ScriptType bash is on the current PATH at /bin/bash +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[8]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[9]</span><span> Recalculate Stars number for all user +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[10]</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> 0 old archives in repository need to be deleted +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[11]</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[12]</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Found 0 broken repo_units +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[13]</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> 0 PRs with incorrect mergebases of 0 PRs total in 1 repos +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[14]</span><span> Check git-daemon-export-ok files +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span></code></pre> +<h3 id="what-does-the-doctor-know">What does the doctor know?<a class="zola-anchor" href="#what-does-the-doctor-know" aria-label="Anchor link for: what-does-the-doctor-know" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Although the <code>doctor</code> can be compared to <a href="https://en.wikipedia.org/wiki/Fsck">fsck(8)</a>, it does not know everything. It took decades for <code>fsck</code> 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 <code>fsck</code> cannot recover from a data loss.</p> +<p>The first <code>doctor</code> 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:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --list +</span><span style="color:#bf616a;">Default</span><span> Name Title +</span><span style="color:#bf616a;">*</span><span> paths Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">storages</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">*</span><span> check-db-version Check Database Version +</span><span> </span><span style="color:#bf616a;">check-db-consistency</span><span> Check consistency of database +</span><span style="color:#bf616a;">*</span><span> check-user-type Check if user with wrong type exist +</span><span style="color:#bf616a;">*</span><span> authorized-keys Check if OpenSSH authorized_keys file is up-to-date +</span><span> </span><span style="color:#bf616a;">script-type</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">hooks</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">recalculate-stars-number</span><span> Recalculate Stars number for all user +</span><span> </span><span style="color:#bf616a;">check-old-archives</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">enable-push-options</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">fix-broken-repo-units</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">recalculate-merge-bases</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">check-git-daemon-export-ok</span><span> Check git-daemon-export-ok files +</span></code></pre> +<p>And then call the <code>check</code> that looks interesting:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> authorized-keys +</span><span style="color:#bf616a;">[1]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>The challenge is to figure out which <code>check</code> does what and at the moment the best source of information is ... <a href="https://github.com/go-gitea/gitea/tree/v1.16.8">the sources</a> themselves. The <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/cmd/doctor.go">doctor.go</a> command is the entry point and <a href="https://github.com/go-gitea/gitea/tree/v1.16.8/modules/doctor">the doctor directory</a> contains the rest.</p> +<p>Some <code>checks</code> are straightforward to understand, even if you do not know Go, such as <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/modules/doctor/authorizedkeys.go">the authorized-keys check</a>. Others are much more involved and your best chance is to <a href="https://matrix.to/#/#gitea:matrix.org">ask the Gitea chatroom</a> for help.</p> +<h3 id="is-it-going-to-hurt">Is it going to hurt?<a class="zola-anchor" href="#is-it-going-to-hurt" aria-label="Anchor link for: is-it-going-to-hurt" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>By default the doctor (very much like <code>fsck -N</code>) 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 <strong>[I]</strong> (which indicates an information) and <strong>[W]</strong> 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 <strong>[I]</strong>, <a href="https://github.com/go-gitea/gitea/pull/19836">which has been fixed</a> in a more recent version of the doctor.</p> +<p>Now let's do something bad: remove the permissions from a hook in our repository:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea chmod</span><span style="color:#bf616a;"> -x</span><span> /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive +</span></code></pre> +<p>Run the doctor with the <code>check</code> supposed to find that out:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>Ask it to fix this with the <code>--fix</code> flag:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks</span><span style="color:#bf616a;"> --fix +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Regenerated hooks for root/test +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>And run it one last time to check all is well:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>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 <code>doctor.log</code> file in the directory from which it runs. Or it can be displayed on the standard output with <code>--log-file -</code>, which is most convenient when running in docker.</p> +<h3 id="going-further">Going further<a class="zola-anchor" href="#going-further" aria-label="Anchor link for: going-further" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>If that was helpful to you, I would very much appreciate if you <a href="https://mastodon.online/@dachary">send me a message on Mastodon</a>. It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could <a href="https://github.com/go-gitea/gitea/pulls">send a pull request</a> to improve the doctor and help it mature.</p> + + + + [solved] Zombies created by Gitea + 2022-06-04T00:00:00+00:00 + 2022-06-04T00:00:00+00:00 + + https://gna.org/blog/zombies-part-2/ + <p>Gitea can <a href="/blog/zombies">create zombies</a>, for instance if a Git mirror takes too long. When updating a mirror, Gitea relies on the <code>git remote update</code> command which creates a child process, <code>git-remote-https</code>, to fetch data from the remote repository. Gitea has an internal timeout that will kill the child process (e.g. <code>git remote update</code>) 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.</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ time git clone https://4.4.4.4 +</span><span>Clonage dans &#39;4.4.4.4&#39;... +</span><span>fatal: impossible d&#39;accéder à &#39;https://4.4.4.4/&#39;: Failed to connect to 4.4.4.4 port 443: Connexion terminée par expiration du délai d&#39;attente +</span><span> +</span><span>real 2m9,753s +</span><span>user 0m0,001s +</span><span>sys 0m0,009s +</span></code></pre> +<p>As explained in the <a href="/blog/zombies/#killing-a-child-process-and-all-its-children">diagnostic blog post regarding Gitea zombies</a> there fortunately is a very simple way to avoid this by making sure each Gitea child is a <a href="https://en.wikipedia.org/wiki/Process_group">process group leader</a>. That first step was <a href="https://github.com/go-gitea/gitea/pull/19865">introduced in Gitea 1.17</a> and <a href="https://github.com/go-gitea/gitea/pull/19865">backported to Gitea 1.16.9</a>. The actual bug fix can now be implemented.</p> +<h3 id="using-negative-process-id-to-kill-children">Using negative process id to kill children<a class="zola-anchor" href="#using-negative-process-id-to-kill-children" aria-label="Anchor link for: using-negative-process-id-to-kill-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>When Gitea timeout on a child, it relies on <a href="https://github.com/golang/go/blob/f8a53df314e4af8cd350eedb0dae77d4c4fc30d0/src/os/exec/exec.go#L650">os.Process.Kill</a> which translates into a using the kill(2) system call to send a SIGKILL signal to unconditionally terminate it: <code>kill(pid, SIGKILL)</code>. Using a negative pid with <code>kill(-pid, SIGKILL)</code> 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:</p> +<blockquote> +<p>If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.</p> +</blockquote> +<p>Which is implemented as follows in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L130">Friendly Forge Format library</a>:</p> +<blockquote> +<p><code>syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)</code></p> +</blockquote> +<h3 id="not-using-the-default-go-commandcontext">Not using the default Go CommandContext<a class="zola-anchor" href="#not-using-the-default-go-commandcontext" aria-label="Anchor link for: not-using-the-default-go-commandcontext" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Since <a href="https://pkg.go.dev/os/exec#CommandContext">CommandContext</a> 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 <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L75-82">Friendly Forge Format library</a> does it:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> ctxErr := watchCtx(ctx, cmd.Process.Pid) +</span><span> err = cmd.Wait() +</span><span> interruptErr := &lt;-ctxErr +</span><span> // If cmd.Wait returned an error, prefer that. +</span><span> // Otherwise, report any error from the interrupt goroutine. +</span><span> if interruptErr != nil &amp;&amp; err == nil { +</span><span> err = interruptErr +</span><span> } +</span></code></pre> +<h3 id="testing-the-bug-is-fixed-and-stays-fixed">Testing the bug is fixed and stays fixed<a class="zola-anchor" href="#testing-the-bug-is-fixed-and-stays-fixed" aria-label="Anchor link for: testing-the-bug-is-fixed-and-stays-fixed" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Long standing bugs that are difficult to reproduce manually such as this one require robust testing to ensure that:</p> +<ul> +<li>the diagnostic identifying the root cause is correct</li> +<li>the bug fix works</li> +<li>it does not resurface insidiously because of a subtle regression introduce years later</li> +</ul> +<p>It is easy to implement as can be seen in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L44-76">Friendly Forge Format library</a>. In a nutshell:</p> +<ul> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L53">git clone https://4.4.4.4</a> which will hang because of firewall rules</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L60-65">wait for the git-remote-https</a> grandchild process to be spawned</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L67-68">cancel the context and wait for the goroutine to terminate</a></li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L70-75">verify the git-remote-https is killed</a></li> +</ul> +<p>And with that... no more zombies!</p> + + + + [diagnostic] Zombies created by Gitea + 2022-06-02T00:00:00+00:00 + 2022-06-02T00:00:00+00:00 + + https://gna.org/blog/zombies/ + <p>The first <a href="https://github.com/go-gitea/gitea/issues/3242">issue about zombie processes</a> created by Gitea was reported in 2017 and <a href="https://github.com/go-gitea/gitea/issues/13987">resurfaced</a> on a <a href="https://github.com/go-gitea/gitea/issues/19077">regular basis</a>. 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:</p> +<ul> +<li>Gitea updates a mirror by spawning the process <code>git remote update</code></li> +<li><code>git remote update</code> spawns yet another process, <code>git fetch</code></li> +<li><code>git fetch</code> is stuck, for instance because of network problems, and Gitea eventually times out</li> +<li>Gitea kill the process <code>git remote update</code></li> +<li>When killed <code>git remote update</code> does not kill its own child and <code>git fetch</code> becomes an orphaned process which keeps running</li> +<li>When <code>git fetch</code> eventually completes it becomes a zombie because its original parent is no longer around to wait on it</li> +</ul> +<h3 id="pid-1-process-and-waiting-on-orphans">PID 1 process and waiting on orphans<a class="zola-anchor" href="#pid-1-process-and-waiting-on-orphans" aria-label="Anchor link for: pid-1-process-and-waiting-on-orphans" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <code>/bin/init</code> and when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile">default docker image</a> this is <code>s6</code>: they will both wait on orphaned processes and there won't be any zombies.</p> +<h3 id="what-if-gitea-is-the-only-running-process">What if Gitea is the only running process?<a class="zola-anchor" href="#what-if-gitea-is-the-only-running-process" aria-label="Anchor link for: what-if-gitea-is-the-only-running-process" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>But when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile.rootless">rootless docker image</a>, 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:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker run --name gitea -p 8080:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless +</span><span>$ docker exec --user 1000 gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com +</span></code></pre> +<p>The <code>git</code> command can then be replaced with a script that waits forever:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ ( echo -e &#39;#!/bin/bash\nsleep infinity&#39; ) | docker exec -i --user root gitea tee /usr/bin/git +</span><span>$ docker exec --user root gitea chmod +x /usr/bin/git +</span></code></pre> +<p>Trying to create a repository from the web interface will create the conditions for a zombie to show:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 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 +</span><span> 164 165 sleep sleep infinity +</span></code></pre> +<p>When the <code>git</code> process is killed by Gitea, the <code>sleep</code> child will be orphaned:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep sleep infinity +</span></code></pre> +<p>Killing it will turn it into a zombie:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea kill 165 +</span><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep [sleep] +</span></code></pre> +<h3 id="killing-a-child-process-and-all-its-children">Killing a child process and all its children<a class="zola-anchor" href="#killing-a-child-process-and-all-its-children" aria-label="Anchor link for: killing-a-child-process-and-all-its-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://en.wikipedia.org/wiki/Process_group">process group leaders</a>. In a nutshell it means that when the child is killed all its children and grand children are also killed.</p> + + + + [solved] Gitea 1.15 and up: path not found or permission denied + 2022-05-28T00:00:00+00:00 + 2022-05-28T00:00:00+00:00 + + https://gna.org/blog/path-not-found/ + <p>In Gitea 1.15 the <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/custom/conf/app.example.ini">app.example.ini</a> file was changed to <a href="https://github.com/go-gitea/gitea/commit/4a84022d2559ccfc99960c7c654ee8b9b38664f7">comment out most of the values</a>. The assumption was that all values exactly matched the defaults <a href="https://github.com/go-gitea/gitea/blob/main/modules/setting/setting.go">in the source code</a>. However, there are differences, for instance for <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/modules/setting/setting.go#L771">APP_DATA_PATH</a>. Before Gitea 1.15, <code>app.example.ini</code> contained:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>directory from which the Gitea server was running</strong>. In Gitea 1.15 up to 1.16, it was commented out:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. </p> +<p>When a distribution such as voidlinux <a href="https://github.com/void-linux/void-packages/blob/master/srcpkgs/gitea/patches/config.patch">uses app.example.ini</a> as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea <a href="https://github.com/go-gitea/gitea/issues/19367">fails with errors</a> such as <code>unable to open level db at data/data/queues/common: mkdir data: permission denied</code>. The regression did not show as soon as Gitea 1.15 became available in voidlinux because the package <a href="https://github.com/void-linux/void-packages/blob/7fc9190f0e0d557dd5031e68df4e183892d4315b/srcpkgs/gitea/patches/config.patch#L62">explicitly set <code>APP_DATA_PATH</code></a>. But this <a href="https://github.com/void-linux/void-packages/commit/19d986a2cae9ce73d32552ddb62443b5e7fa13e2">changed when Gitea 1.15.6 was packaged</a> and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the <a href="https://github.com/void-linux/void-packages/commit/44b6c96fa12ce9d993c7a2ac9486d892735b7e3a">Gitea 1.16.8</a> package.</p> +<p>The <code>APP_DATA_PATH</code> directory is not the only one, the <code>[log] ROOT_PATH</code> is another example. There is an <a href="https://github.com/go-gitea/gitea/pull/19815">ongoing effort</a> 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 <code>app.ini</code> file will be interpreted differently. In the case of <code>APP_DATA_PATH</code>, both:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>will be interpreted to be relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. Every Gitea installation using <strong>APP_DATA_PATH = data</strong> will need to update the value to be an absolute path such as <strong>/var/lib/gitea/data</strong> so that it keeps pointing to the expected directory.</p> +<p>In order to prepare for the change or ensure the consistency of all path, there fortunately is a very simple <strong>solution: always use absolute paths in the <code>app.ini</code> configuration file</strong>.</p> + + + + [solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else + 2022-05-15T00:00:00+00:00 + 2022-05-15T00:00:00+00:00 + + https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/ + <p>April 12, 2022 version <a href="https://lore.kernel.org/git/xmqqv8veb5i6.fsf@gitster.g/">git v2.35.2</a> was released and addresses a security issue <a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a>. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as <a href="https://security-tracker.debian.org/tracker/CVE-2022-24765">Debian GNU/Linux</a>, <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<p><strong>If Gitea runs as user <code>foo</code>, calls a patched Git version and a parent directory of the git repositories is owned by a user other than <code>foo</code>, it will fail</strong> with a message such as:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>Failed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository (&#39;/data/git/repositories/git/data.git&#39; is owned by someone else) +</span></code></pre> +<p>This started to show in the past few weeks to <a href="https://github.com/go-gitea/gitea/issues/19455">users running the Gitea binary on Windows</a> who also independently installed git v2.36. And then to people running <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106331149">Gitea from snap</a>, on <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106312061">a Synology NAS</a> and then people running from <a href="https://github.com/go-gitea/gitea/blob/main/Dockerfile#L2">Gitea docker images</a> which is based on <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<h3 id="workarounds">Workarounds<a class="zola-anchor" href="#workarounds" aria-label="Anchor link for: workarounds" + ><span class="anchor-icon">#</span></a +> +</h3> +<ul> +<li>If using <a href="https://hub.docker.com/r/gitea/gitea">Gitea docker images</a>: +<ul> +<li>upgrade to <a href="https://github.com/go-gitea/gitea/pull/19876">Gitea &gt;=1.16.9</a> or 1.17, both have git &gt;=2.36</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +<li>If the Gitea binary was installed independently of git, upgrade git to a version that is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a> and disable the security check entirely with: +<ul> +<li>impersonate the <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">user dedicated to Gitea</a> (usually git)</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +</ul> +<h3 id="bug-fix">Bug fix<a class="zola-anchor" href="#bug-fix" aria-label="Anchor link for: bug-fix" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>The <a href="https://github.com/go-gitea/gitea/pull/19870">bug fix</a> is for Gitea to ensure <code>git config --global --replace-all safe.directory '*'</code> is set on its <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">dedicated user</a> when it initializes. It is effective on the condition that the git CLI version is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a>.</p> +<h3 id="bug-fix-rationale">Bug fix rationale<a class="zola-anchor" href="#bug-fix-rationale" aria-label="Anchor link for: bug-fix-rationale" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>It is safe to <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs">disable the security check in Gitea</a>. It is not vulnerable to <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong> because it calls the git CLI <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/command.go#L160">after changing its working directory</a> to be the git repository targeted by the command (for instance <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/diff.go#L38-L45">diff</a>) or a temporary directory. Therefore <strong>it will not explore the parent directories looking for a git configuration file</strong>.</p> +<p>The security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and <strong>not because a parent directory is owned by an unexpected user</strong>. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong>.</p> +<p>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.</p> +<p>Gitea runs under a dedicated user, either when installed <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">from binary</a> or from <a href="https://docs.gitea.io/en-us/install-with-docker/">docker</a> and <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/git.go#L196-L207">modifies the global git configuration</a> depending on the git version at initialization time. Fixing the problem can therefore be done by <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#bcd72ff867cbd1ddd5b6518c3a05b5f1a6021286_209_209">disabling the security check in the global git config file at initialization time</a>. It also requires a minimum version of git 2.36 to be installed, which is the case for Gitea docker images with <a href="https://github.com/go-gitea/gitea/pull/19876">versions &gt;= 1.16.9</a>.</p> + + + + [solved] blank or error 500 page after login + 2022-05-08T00:00:00+00:00 + 2022-05-08T00:00:00+00:00 + + https://gna.org/blog/blank-or-error-500-page-after-login/ + <p>The <a href="https://docs.gitea.io/en-us/upgrade-from-gitea/#upgrade-from-binary">instructions to upgrade a Gitea instance</a> only require three to four steps. They work fine most of the time but the documentation is lacking a &quot;Troubleshooting&quot; 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.</p> +<p>An <a href="https://forum.gna.org/t/things-to-know-about-gitea-upgrades/39">inventory of the known upgrade issues</a> was started to figure out how to structure such a section in the documentation. The <a href="https://blog.gitea.io/">release notes</a> were analyzed all the way back to <a href="https://github.com/go-gitea/gitea/releases/tag/v1.9.6">Gitea 1.9.6</a> and the work is still in progress. Here is a sample of the tips that will be included:</p> +<ul> +<li>Upgrade directly to the latest Gitea version, there is no need to upgrade to intermediate versions.</li> +<li>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.</li> +<li>etc.</li> +</ul> +<p>However, even with the best documentation, someone will eventually <strong>run into an new problem</strong> and fixing it without compromising the integrity of the data will be challenging. This is best demonstrated by a real world example that was concluded a few days ago.</p> +<h1 id="getting-help-from-the-community">Getting help from the community<a class="zola-anchor" href="#getting-help-from-the-community" aria-label="Anchor link for: getting-help-from-the-community" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>After <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">upgrading a Gitea intsance from 1.9.6 to 1.16.5</a> the tests conducted manually did not uncover any problem. However, after going to production, some users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser. The person in charge of the upgrade never had to diagnose Gitea problem and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">reached out in the Gitea forum</a>.</p> +<blockquote> +<p><strong>Tip: explain the problem in a public forum as early as possible to get help from the community</strong></p> +</blockquote> +<p>In their post in the forum they explained how they attempted to diagnose the problem and how why they thought that only users created a few years ago were impacted. It was a detailed analysis that was concluded with a partial copy of the logs. It was unfortunately missing <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">key information</a> that was provided only three days later. In the meantime, as they could not figure out the source of the problem, they were on the <strong>verge of <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/11">accepting the loss of all the Gitea database</a> and start over from the repositories</strong>. However, once all the details were available, <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">a workaround</a> was suggested in the forum.</p> +<blockquote> +<p><strong>Tip: focus more on providing detailed facts than exposing the attempted diagnostic</strong></p> +</blockquote> +<p>There was hope to fix Gitea and in the following days they applied the workaround. They also tried to improve it but without success and eventually accepted a <strong>partial data loss</strong> as inevitable and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">reported their success back to the forum</a>.</p> +<blockquote> +<p><strong>Tip: when getting support from the community, providing feedback is the best token of appreciation</strong></p> +</blockquote> +<h1 id="getting-professional-help">Getting professional help<a class="zola-anchor" href="#getting-professional-help" aria-label="Anchor link for: getting-professional-help" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The <a href="https://gna.org/gitea-clinic/">Gna! Clinic</a> is a collective of individual and companies that provides professional services to Gitea admins. They are active members of the Gitea community who <a href="https://discourse.gitea.io/u/dachary/activity">help out</a> as volunteers. They can also be hired to resolve the more complicated cases.</p> +<p>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 <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">proposed their assistance</a> but although <a href="https://discourse.gitea.io/t/user-research-about-gitea-upgrade-experiences-call-for-volunteers/5063/2">well received</a>, it was not accepted.</p> +<p>When the Gitea admin explained how they chose to resolve the problem <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">on the forum</a>, it confirmed the workaround was viable and the root problem was identified. That was enough to figure out a fix for the underlying bug with <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a rather simple patch</a> that was merged <a href="https://github.com/go-gitea/gitea/pull/19629">and backported</a> in the following days. But it happened too late to avoid the data loss.</p> +<p>To summarize with a timeline, here is what happened:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login and a the Gitea admin tries to diagnose the problem</li> +<li>J+2: A message is sent <strong>to ask for help in the community</strong></li> +<li>J+2 to J+6: Three people in the community suggest ideas but <strong>the Gitea admin cannot figure out the root cause and is on the verge of accepting the loss of all Gitea data</strong> and restart from the git repositories</li> +<li>J+6: A <strong>workaround is suggested by the community</strong></li> +<li>J+7 to J+17: The Gitea admin applies the <strong>workaround and only looses part of the Gitea data</strong></li> +</ul> +<p>And in retrospect, here is what could have happened instead:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login</li> +<li>J+1: The Gitea admin <strong><a href="https://gna.org/gitea-clinic/">reaches out to someone at the Gna! Clinic</a></strong></li> +<li>J+2: The <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">logs of the Gitea instance</a> are analyzed, <strong>the root cause diagnosed</strong> and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a patch</a> is created to fix it.</li> +<li>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 <a href="https://github.com/go-gitea/gitea/pull/19629">the backport</a>. The Gitea admin runs the patched Gitea binary in the meantime. <strong>There is no data loss</strong>.</li> +</ul> +<p>It does not mean all upgrade problems can be resolved so easily. But it shows, with an example, that in some cases it makes sense to get professional help.</p> + + + diff --git a/tags/problem/index.html b/tags/problem/index.html new file mode 100644 index 0000000..596f4e4 --- /dev/null +++ b/tags/problem/index.html @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + problem | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+ +
+

#problem

+ + RSS icon +
+ +
+ + + + +
+ + +
+ + diff --git a/tags/troubleshoot/atom.xml b/tags/troubleshoot/atom.xml new file mode 100644 index 0000000..b2394b8 --- /dev/null +++ b/tags/troubleshoot/atom.xml @@ -0,0 +1,452 @@ + + + - troubleshoot + + + Zola + 2022-07-20T00:00:00+00:00 + https://gna.org/tags/troubleshoot/atom.xml + + 1.17 breaking changes episode 2: preserving a custom gitconfig + 2022-07-20T00:00:00+00:00 + 2022-07-20T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-2/ + <p>On June 21st, 2022 1.17.0-rc1 was published and the location of the gitconfig file moved to a new location, <a href="2022-06-23-1.17-breaking-episode-1">which required manual intervention</a>. This change impacted a large number of Gitea installations because the docker image tag <strong>latest</strong> <a href="https://mastodon.online/@hostea/108514134565401798">was set to 1.17.0-rc1</a> 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.</p> +<p>Unfortunately moving the git home directory in 1.17.0-rc1 was implemented in way that created a security problem. The <a href="https://github.com/go-gitea/gitea/pull/20114">fix that was merged in Gitea</a> to fix it requires moving the gitconfig file and was released July 19th, 2022 in 1.17.0-rc2.</p> +<p>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 <strong>latest</strong> 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.</p> +<p>In 1.17.0-rc2, a custom .gitconfig must be moved manually to the <a href="https://docs.gitea.io/en-us/config-cheat-sheet/#git-git">new git home directory</a> as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Data Root Path</strong>/home (which is <code>/data/gitea/home</code> in the example above).</li> +</ul> + + + + 1.17 breaking changes episode 1: preserving a custom gitconfig + 2022-06-22T00:00:00+00:00 + 2022-06-22T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-1/ + <p>Before version 1.17, when Gitea needed to change the <a href="https://git-scm.com/docs/git-config">git configuration</a>, it modified the <code>$HOME/.gitconfig</code> file. For instance it would <a href="https://github.com/go-gitea/gitea/blob/release/v1.16/modules/git/git.go#L174-L177">set core.quotePath to false</a>:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[core] +</span><span> </span><span style="color:#bf616a;">quotePath </span><span>= </span><span style="color:#d08770;">false +</span></code></pre> +<p>When installing Gitea <a href="https://docs.gitea.io/en-us/install-with-docker/">from docker</a> or <a href="https://docs.gitea.io/en-us/install-with-docker-rootless/">rootless</a> or even <a href="https://docs.gitea.io/en-us/install-from-binary/">from binary</a> this <code>$HOME/.gitconfig</code> file belongs to a user that is <a href="https://docs.gitea.io/en-us/install-from-binary/#prepare-environment">dedicated to Gitea</a> and not used by anyone else.</p> +<p>However, if an Gitea installation was done differently and <code>$HOME/.gitconfig</code> 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:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[user] +</span><span> </span><span style="color:#bf616a;">name </span><span>= Jane Doe +</span><span> </span><span style="color:#bf616a;">email </span><span>= jane</span><span style="color:#b48ead;">@doe</span><span>.com +</span></code></pre> +<p>It is also possible that the file was modified manually by the Gitea admin for other reasons. In both there is a <strong>potential for breakage when upgrading to Gitea &gt;= 1.17 because the location of the file changed</strong>. It must be moved manually to the new location as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Repository Root Path</strong> (which is <code>/data/git/repositories</code> in the example above).</li> +</ul> +<p>The reason why this breaking change was introduced is to workaround <a href="https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/">a rare problem</a> impacting Gitea installations relying on networked volumes.</p> + + + + [tutorial] A gentle introduction to the gitea doctor + 2022-06-14T00:00:00+00:00 + 2022-06-14T00:00:00+00:00 + + https://gna.org/blog/gentle-introduction-to-the-doctor/ + <p>While helping people with their upgrades <a href="https://discourse.gitea.io/t/migration-from-1-2-to-1-16-8/5309">in the Gitea forum</a> or <a href="https://forum.gna.org/t/gitea-upgrade-from-1-14-1-to-1-16-8/90">at the Gna! clinic</a>, I realized that few Gitea admins know about the <a href="https://docs.gitea.io/en-us/command-line/#doctor"><code>gitea doctor</code></a> command and decided to write this blog post as a gentle introduction.</p> +<h3 id="an-apple-a-day-keeps-the-doctor-away">An apple a day keeps the doctor away<a class="zola-anchor" href="#an-apple-a-day-keeps-the-doctor-away" aria-label="Anchor link for: an-apple-a-day-keeps-the-doctor-away" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Or in our case, Gitea versions <a href="https://github.com/go-gitea/gitea/blob/v1.11.5/cmd/doctor.go">below 1.11.5</a>. Since then, the <code>gitea doctor</code> 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 <code>gitea doctor</code> was backported to <a href="https://github.com/go-gitea/gitea/blob/v1.10.5/cmd/doctor.go">Gitea 1.10.5</a> and <a href="https://github.com/go-gitea/gitea/blob/v1.10.6/cmd/doctor.go">Gitea 1.10.6</a> and may be of help if you run this particular version and are facing the problem that motivated the backport.</p> +<p>With each version <code>gitea doctor</code> improves and gains new capabilities. For instance, in Gitea 1.17 it becomes aware of <a href="https://github.com/go-gitea/gitea/pull/19731">orphaned pull requests</a> and is able to fix them. If such a problem exists in Gitea 1.16, it does not know about it.</p> +<h3 id="calling-the-doctor">Calling the doctor<a class="zola-anchor" href="#calling-the-doctor" aria-label="Anchor link for: calling-the-doctor" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In the following, examples are based on a Gitea 1.16.8 instance you can run as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker run</span><span style="color:#bf616a;"> --name</span><span> gitea</span><span style="color:#bf616a;"> -p</span><span> 3000:3000</span><span style="color:#bf616a;"> -e</span><span> GITEA__security__INSTALL_LOCK=true</span><span style="color:#bf616a;"> -d</span><span> gitea/gitea:1.16.8-rootless +</span><span style="color:#bf616a;">$</span><span> docker exec gitea gitea admin user create</span><span style="color:#bf616a;"> --admin --username</span><span> root</span><span style="color:#bf616a;"> --password</span><span> admin1234</span><span style="color:#bf616a;"> --email</span><span> root@example.com +</span><span style="color:#bf616a;">$</span><span> docker exec gitea mkdir /var/lib/gitea/data/log +</span></code></pre> +<p>And then you can go to the <a href="https://127.0.0.1:3000/">web interface</a> to create a <code>test</code> repository, with an initial <code>README.md</code> file. When this is done the doctor can be called as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --all +</span><span style="color:#bf616a;">[1]</span><span> Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Configuration File Path: &quot;</span><span style="color:#a3be8c;">/etc/gitea/app.ini</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Repository Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/git/repositories</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Data Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Custom File Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/custom</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Work directory: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Log Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/data/log</span><span>&quot; +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[2]</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[3]</span><span> Check Database Version +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[4]</span><span> Check consistency of database +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[5]</span><span> Check if user with wrong type exist +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[6]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[7]</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> ScriptType bash is on the current PATH at /bin/bash +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[8]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[9]</span><span> Recalculate Stars number for all user +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[10]</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> 0 old archives in repository need to be deleted +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[11]</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[12]</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Found 0 broken repo_units +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[13]</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> 0 PRs with incorrect mergebases of 0 PRs total in 1 repos +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[14]</span><span> Check git-daemon-export-ok files +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span></code></pre> +<h3 id="what-does-the-doctor-know">What does the doctor know?<a class="zola-anchor" href="#what-does-the-doctor-know" aria-label="Anchor link for: what-does-the-doctor-know" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Although the <code>doctor</code> can be compared to <a href="https://en.wikipedia.org/wiki/Fsck">fsck(8)</a>, it does not know everything. It took decades for <code>fsck</code> 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 <code>fsck</code> cannot recover from a data loss.</p> +<p>The first <code>doctor</code> 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:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --list +</span><span style="color:#bf616a;">Default</span><span> Name Title +</span><span style="color:#bf616a;">*</span><span> paths Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">storages</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">*</span><span> check-db-version Check Database Version +</span><span> </span><span style="color:#bf616a;">check-db-consistency</span><span> Check consistency of database +</span><span style="color:#bf616a;">*</span><span> check-user-type Check if user with wrong type exist +</span><span style="color:#bf616a;">*</span><span> authorized-keys Check if OpenSSH authorized_keys file is up-to-date +</span><span> </span><span style="color:#bf616a;">script-type</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">hooks</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">recalculate-stars-number</span><span> Recalculate Stars number for all user +</span><span> </span><span style="color:#bf616a;">check-old-archives</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">enable-push-options</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">fix-broken-repo-units</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">recalculate-merge-bases</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">check-git-daemon-export-ok</span><span> Check git-daemon-export-ok files +</span></code></pre> +<p>And then call the <code>check</code> that looks interesting:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> authorized-keys +</span><span style="color:#bf616a;">[1]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>The challenge is to figure out which <code>check</code> does what and at the moment the best source of information is ... <a href="https://github.com/go-gitea/gitea/tree/v1.16.8">the sources</a> themselves. The <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/cmd/doctor.go">doctor.go</a> command is the entry point and <a href="https://github.com/go-gitea/gitea/tree/v1.16.8/modules/doctor">the doctor directory</a> contains the rest.</p> +<p>Some <code>checks</code> are straightforward to understand, even if you do not know Go, such as <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/modules/doctor/authorizedkeys.go">the authorized-keys check</a>. Others are much more involved and your best chance is to <a href="https://matrix.to/#/#gitea:matrix.org">ask the Gitea chatroom</a> for help.</p> +<h3 id="is-it-going-to-hurt">Is it going to hurt?<a class="zola-anchor" href="#is-it-going-to-hurt" aria-label="Anchor link for: is-it-going-to-hurt" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>By default the doctor (very much like <code>fsck -N</code>) 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 <strong>[I]</strong> (which indicates an information) and <strong>[W]</strong> 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 <strong>[I]</strong>, <a href="https://github.com/go-gitea/gitea/pull/19836">which has been fixed</a> in a more recent version of the doctor.</p> +<p>Now let's do something bad: remove the permissions from a hook in our repository:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea chmod</span><span style="color:#bf616a;"> -x</span><span> /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive +</span></code></pre> +<p>Run the doctor with the <code>check</code> supposed to find that out:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>Ask it to fix this with the <code>--fix</code> flag:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks</span><span style="color:#bf616a;"> --fix +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Regenerated hooks for root/test +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>And run it one last time to check all is well:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>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 <code>doctor.log</code> file in the directory from which it runs. Or it can be displayed on the standard output with <code>--log-file -</code>, which is most convenient when running in docker.</p> +<h3 id="going-further">Going further<a class="zola-anchor" href="#going-further" aria-label="Anchor link for: going-further" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>If that was helpful to you, I would very much appreciate if you <a href="https://mastodon.online/@dachary">send me a message on Mastodon</a>. It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could <a href="https://github.com/go-gitea/gitea/pulls">send a pull request</a> to improve the doctor and help it mature.</p> + + + + [solved] Zombies created by Gitea + 2022-06-04T00:00:00+00:00 + 2022-06-04T00:00:00+00:00 + + https://gna.org/blog/zombies-part-2/ + <p>Gitea can <a href="/blog/zombies">create zombies</a>, for instance if a Git mirror takes too long. When updating a mirror, Gitea relies on the <code>git remote update</code> command which creates a child process, <code>git-remote-https</code>, to fetch data from the remote repository. Gitea has an internal timeout that will kill the child process (e.g. <code>git remote update</code>) 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.</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ time git clone https://4.4.4.4 +</span><span>Clonage dans &#39;4.4.4.4&#39;... +</span><span>fatal: impossible d&#39;accéder à &#39;https://4.4.4.4/&#39;: Failed to connect to 4.4.4.4 port 443: Connexion terminée par expiration du délai d&#39;attente +</span><span> +</span><span>real 2m9,753s +</span><span>user 0m0,001s +</span><span>sys 0m0,009s +</span></code></pre> +<p>As explained in the <a href="/blog/zombies/#killing-a-child-process-and-all-its-children">diagnostic blog post regarding Gitea zombies</a> there fortunately is a very simple way to avoid this by making sure each Gitea child is a <a href="https://en.wikipedia.org/wiki/Process_group">process group leader</a>. That first step was <a href="https://github.com/go-gitea/gitea/pull/19865">introduced in Gitea 1.17</a> and <a href="https://github.com/go-gitea/gitea/pull/19865">backported to Gitea 1.16.9</a>. The actual bug fix can now be implemented.</p> +<h3 id="using-negative-process-id-to-kill-children">Using negative process id to kill children<a class="zola-anchor" href="#using-negative-process-id-to-kill-children" aria-label="Anchor link for: using-negative-process-id-to-kill-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>When Gitea timeout on a child, it relies on <a href="https://github.com/golang/go/blob/f8a53df314e4af8cd350eedb0dae77d4c4fc30d0/src/os/exec/exec.go#L650">os.Process.Kill</a> which translates into a using the kill(2) system call to send a SIGKILL signal to unconditionally terminate it: <code>kill(pid, SIGKILL)</code>. Using a negative pid with <code>kill(-pid, SIGKILL)</code> 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:</p> +<blockquote> +<p>If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.</p> +</blockquote> +<p>Which is implemented as follows in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L130">Friendly Forge Format library</a>:</p> +<blockquote> +<p><code>syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)</code></p> +</blockquote> +<h3 id="not-using-the-default-go-commandcontext">Not using the default Go CommandContext<a class="zola-anchor" href="#not-using-the-default-go-commandcontext" aria-label="Anchor link for: not-using-the-default-go-commandcontext" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Since <a href="https://pkg.go.dev/os/exec#CommandContext">CommandContext</a> 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 <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec.go#L75-82">Friendly Forge Format library</a> does it:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> ctxErr := watchCtx(ctx, cmd.Process.Pid) +</span><span> err = cmd.Wait() +</span><span> interruptErr := &lt;-ctxErr +</span><span> // If cmd.Wait returned an error, prefer that. +</span><span> // Otherwise, report any error from the interrupt goroutine. +</span><span> if interruptErr != nil &amp;&amp; err == nil { +</span><span> err = interruptErr +</span><span> } +</span></code></pre> +<h3 id="testing-the-bug-is-fixed-and-stays-fixed">Testing the bug is fixed and stays fixed<a class="zola-anchor" href="#testing-the-bug-is-fixed-and-stays-fixed" aria-label="Anchor link for: testing-the-bug-is-fixed-and-stays-fixed" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Long standing bugs that are difficult to reproduce manually such as this one require robust testing to ensure that:</p> +<ul> +<li>the diagnostic identifying the root cause is correct</li> +<li>the bug fix works</li> +<li>it does not resurface insidiously because of a subtle regression introduce years later</li> +</ul> +<p>It is easy to implement as can be seen in the <a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L44-76">Friendly Forge Format library</a>. In a nutshell:</p> +<ul> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L53">git clone https://4.4.4.4</a> which will hang because of firewall rules</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L60-65">wait for the git-remote-https</a> grandchild process to be spawned</li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L67-68">cancel the context and wait for the goroutine to terminate</a></li> +<li><a href="https://lab.forgefriends.org/friendlyforgeformat/gofff/-/blob/a9603c7cc934fccd4382b7f4309b75c852742480/util/exec_test.go#L70-75">verify the git-remote-https is killed</a></li> +</ul> +<p>And with that... no more zombies!</p> + + + + [diagnostic] Zombies created by Gitea + 2022-06-02T00:00:00+00:00 + 2022-06-02T00:00:00+00:00 + + https://gna.org/blog/zombies/ + <p>The first <a href="https://github.com/go-gitea/gitea/issues/3242">issue about zombie processes</a> created by Gitea was reported in 2017 and <a href="https://github.com/go-gitea/gitea/issues/13987">resurfaced</a> on a <a href="https://github.com/go-gitea/gitea/issues/19077">regular basis</a>. 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:</p> +<ul> +<li>Gitea updates a mirror by spawning the process <code>git remote update</code></li> +<li><code>git remote update</code> spawns yet another process, <code>git fetch</code></li> +<li><code>git fetch</code> is stuck, for instance because of network problems, and Gitea eventually times out</li> +<li>Gitea kill the process <code>git remote update</code></li> +<li>When killed <code>git remote update</code> does not kill its own child and <code>git fetch</code> becomes an orphaned process which keeps running</li> +<li>When <code>git fetch</code> eventually completes it becomes a zombie because its original parent is no longer around to wait on it</li> +</ul> +<h3 id="pid-1-process-and-waiting-on-orphans">PID 1 process and waiting on orphans<a class="zola-anchor" href="#pid-1-process-and-waiting-on-orphans" aria-label="Anchor link for: pid-1-process-and-waiting-on-orphans" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <code>/bin/init</code> and when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile">default docker image</a> this is <code>s6</code>: they will both wait on orphaned processes and there won't be any zombies.</p> +<h3 id="what-if-gitea-is-the-only-running-process">What if Gitea is the only running process?<a class="zola-anchor" href="#what-if-gitea-is-the-only-running-process" aria-label="Anchor link for: what-if-gitea-is-the-only-running-process" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>But when Gitea runs from the <a href="https://github.com/go-gitea/gitea/blob/6171ea7d318c0ca8714bc6efd6a97ea4b495eb6d/Dockerfile.rootless">rootless docker image</a>, 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:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker run --name gitea -p 8080:3000 -e GITEA__security__INSTALL_LOCK=true -d gitea/gitea:1.16.8-rootless +</span><span>$ docker exec --user 1000 gitea gitea admin user create --admin --username root --password admin1234 --email root@example.com +</span></code></pre> +<p>The <code>git</code> command can then be replaced with a script that waits forever:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ ( echo -e &#39;#!/bin/bash\nsleep infinity&#39; ) | docker exec -i --user root gitea tee /usr/bin/git +</span><span>$ docker exec --user root gitea chmod +x /usr/bin/git +</span></code></pre> +<p>Trying to create a repository from the web interface will create the conditions for a zombie to show:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 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 +</span><span> 164 165 sleep sleep infinity +</span></code></pre> +<p>When the <code>git</code> process is killed by Gitea, the <code>sleep</code> child will be orphaned:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep sleep infinity +</span></code></pre> +<p>Killing it will turn it into a zombie:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ docker exec gitea kill 165 +</span><span>$ docker exec gitea ps -o ppid,pid,comm,args +</span><span>PPID PID COMMAND COMMAND +</span><span> 0 1 gitea /usr/local/bin/gitea -c /etc/gitea/app.ini web +</span><span> 1 94 sleep [sleep] +</span><span> 1 99 sleep [sleep] +</span><span> 1 111 sleep [sleep] +</span><span> 1 165 sleep [sleep] +</span></code></pre> +<h3 id="killing-a-child-process-and-all-its-children">Killing a child process and all its children<a class="zola-anchor" href="#killing-a-child-process-and-all-its-children" aria-label="Anchor link for: killing-a-child-process-and-all-its-children" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>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 <a href="https://en.wikipedia.org/wiki/Process_group">process group leaders</a>. In a nutshell it means that when the child is killed all its children and grand children are also killed.</p> + + + + [solved] Gitea 1.15 and up: path not found or permission denied + 2022-05-28T00:00:00+00:00 + 2022-05-28T00:00:00+00:00 + + https://gna.org/blog/path-not-found/ + <p>In Gitea 1.15 the <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/custom/conf/app.example.ini">app.example.ini</a> file was changed to <a href="https://github.com/go-gitea/gitea/commit/4a84022d2559ccfc99960c7c654ee8b9b38664f7">comment out most of the values</a>. The assumption was that all values exactly matched the defaults <a href="https://github.com/go-gitea/gitea/blob/main/modules/setting/setting.go">in the source code</a>. However, there are differences, for instance for <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/modules/setting/setting.go#L771">APP_DATA_PATH</a>. Before Gitea 1.15, <code>app.example.ini</code> contained:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>directory from which the Gitea server was running</strong>. In Gitea 1.15 up to 1.16, it was commented out:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. </p> +<p>When a distribution such as voidlinux <a href="https://github.com/void-linux/void-packages/blob/master/srcpkgs/gitea/patches/config.patch">uses app.example.ini</a> as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea <a href="https://github.com/go-gitea/gitea/issues/19367">fails with errors</a> such as <code>unable to open level db at data/data/queues/common: mkdir data: permission denied</code>. The regression did not show as soon as Gitea 1.15 became available in voidlinux because the package <a href="https://github.com/void-linux/void-packages/blob/7fc9190f0e0d557dd5031e68df4e183892d4315b/srcpkgs/gitea/patches/config.patch#L62">explicitly set <code>APP_DATA_PATH</code></a>. But this <a href="https://github.com/void-linux/void-packages/commit/19d986a2cae9ce73d32552ddb62443b5e7fa13e2">changed when Gitea 1.15.6 was packaged</a> and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the <a href="https://github.com/void-linux/void-packages/commit/44b6c96fa12ce9d993c7a2ac9486d892735b7e3a">Gitea 1.16.8</a> package.</p> +<p>The <code>APP_DATA_PATH</code> directory is not the only one, the <code>[log] ROOT_PATH</code> is another example. There is an <a href="https://github.com/go-gitea/gitea/pull/19815">ongoing effort</a> 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 <code>app.ini</code> file will be interpreted differently. In the case of <code>APP_DATA_PATH</code>, both:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>will be interpreted to be relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. Every Gitea installation using <strong>APP_DATA_PATH = data</strong> will need to update the value to be an absolute path such as <strong>/var/lib/gitea/data</strong> so that it keeps pointing to the expected directory.</p> +<p>In order to prepare for the change or ensure the consistency of all path, there fortunately is a very simple <strong>solution: always use absolute paths in the <code>app.ini</code> configuration file</strong>.</p> + + + + [solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else + 2022-05-15T00:00:00+00:00 + 2022-05-15T00:00:00+00:00 + + https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/ + <p>April 12, 2022 version <a href="https://lore.kernel.org/git/xmqqv8veb5i6.fsf@gitster.g/">git v2.35.2</a> was released and addresses a security issue <a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a>. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as <a href="https://security-tracker.debian.org/tracker/CVE-2022-24765">Debian GNU/Linux</a>, <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<p><strong>If Gitea runs as user <code>foo</code>, calls a patched Git version and a parent directory of the git repositories is owned by a user other than <code>foo</code>, it will fail</strong> with a message such as:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>Failed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository (&#39;/data/git/repositories/git/data.git&#39; is owned by someone else) +</span></code></pre> +<p>This started to show in the past few weeks to <a href="https://github.com/go-gitea/gitea/issues/19455">users running the Gitea binary on Windows</a> who also independently installed git v2.36. And then to people running <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106331149">Gitea from snap</a>, on <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106312061">a Synology NAS</a> and then people running from <a href="https://github.com/go-gitea/gitea/blob/main/Dockerfile#L2">Gitea docker images</a> which is based on <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<h3 id="workarounds">Workarounds<a class="zola-anchor" href="#workarounds" aria-label="Anchor link for: workarounds" + ><span class="anchor-icon">#</span></a +> +</h3> +<ul> +<li>If using <a href="https://hub.docker.com/r/gitea/gitea">Gitea docker images</a>: +<ul> +<li>upgrade to <a href="https://github.com/go-gitea/gitea/pull/19876">Gitea &gt;=1.16.9</a> or 1.17, both have git &gt;=2.36</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +<li>If the Gitea binary was installed independently of git, upgrade git to a version that is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a> and disable the security check entirely with: +<ul> +<li>impersonate the <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">user dedicated to Gitea</a> (usually git)</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +</ul> +<h3 id="bug-fix">Bug fix<a class="zola-anchor" href="#bug-fix" aria-label="Anchor link for: bug-fix" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>The <a href="https://github.com/go-gitea/gitea/pull/19870">bug fix</a> is for Gitea to ensure <code>git config --global --replace-all safe.directory '*'</code> is set on its <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">dedicated user</a> when it initializes. It is effective on the condition that the git CLI version is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a>.</p> +<h3 id="bug-fix-rationale">Bug fix rationale<a class="zola-anchor" href="#bug-fix-rationale" aria-label="Anchor link for: bug-fix-rationale" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>It is safe to <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs">disable the security check in Gitea</a>. It is not vulnerable to <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong> because it calls the git CLI <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/command.go#L160">after changing its working directory</a> to be the git repository targeted by the command (for instance <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/diff.go#L38-L45">diff</a>) or a temporary directory. Therefore <strong>it will not explore the parent directories looking for a git configuration file</strong>.</p> +<p>The security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and <strong>not because a parent directory is owned by an unexpected user</strong>. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong>.</p> +<p>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.</p> +<p>Gitea runs under a dedicated user, either when installed <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">from binary</a> or from <a href="https://docs.gitea.io/en-us/install-with-docker/">docker</a> and <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/git.go#L196-L207">modifies the global git configuration</a> depending on the git version at initialization time. Fixing the problem can therefore be done by <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#bcd72ff867cbd1ddd5b6518c3a05b5f1a6021286_209_209">disabling the security check in the global git config file at initialization time</a>. It also requires a minimum version of git 2.36 to be installed, which is the case for Gitea docker images with <a href="https://github.com/go-gitea/gitea/pull/19876">versions &gt;= 1.16.9</a>.</p> + + + + [solved] blank or error 500 page after login + 2022-05-08T00:00:00+00:00 + 2022-05-08T00:00:00+00:00 + + https://gna.org/blog/blank-or-error-500-page-after-login/ + <p>The <a href="https://docs.gitea.io/en-us/upgrade-from-gitea/#upgrade-from-binary">instructions to upgrade a Gitea instance</a> only require three to four steps. They work fine most of the time but the documentation is lacking a &quot;Troubleshooting&quot; 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.</p> +<p>An <a href="https://forum.gna.org/t/things-to-know-about-gitea-upgrades/39">inventory of the known upgrade issues</a> was started to figure out how to structure such a section in the documentation. The <a href="https://blog.gitea.io/">release notes</a> were analyzed all the way back to <a href="https://github.com/go-gitea/gitea/releases/tag/v1.9.6">Gitea 1.9.6</a> and the work is still in progress. Here is a sample of the tips that will be included:</p> +<ul> +<li>Upgrade directly to the latest Gitea version, there is no need to upgrade to intermediate versions.</li> +<li>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.</li> +<li>etc.</li> +</ul> +<p>However, even with the best documentation, someone will eventually <strong>run into an new problem</strong> and fixing it without compromising the integrity of the data will be challenging. This is best demonstrated by a real world example that was concluded a few days ago.</p> +<h1 id="getting-help-from-the-community">Getting help from the community<a class="zola-anchor" href="#getting-help-from-the-community" aria-label="Anchor link for: getting-help-from-the-community" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>After <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">upgrading a Gitea intsance from 1.9.6 to 1.16.5</a> the tests conducted manually did not uncover any problem. However, after going to production, some users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser. The person in charge of the upgrade never had to diagnose Gitea problem and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">reached out in the Gitea forum</a>.</p> +<blockquote> +<p><strong>Tip: explain the problem in a public forum as early as possible to get help from the community</strong></p> +</blockquote> +<p>In their post in the forum they explained how they attempted to diagnose the problem and how why they thought that only users created a few years ago were impacted. It was a detailed analysis that was concluded with a partial copy of the logs. It was unfortunately missing <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">key information</a> that was provided only three days later. In the meantime, as they could not figure out the source of the problem, they were on the <strong>verge of <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/11">accepting the loss of all the Gitea database</a> and start over from the repositories</strong>. However, once all the details were available, <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">a workaround</a> was suggested in the forum.</p> +<blockquote> +<p><strong>Tip: focus more on providing detailed facts than exposing the attempted diagnostic</strong></p> +</blockquote> +<p>There was hope to fix Gitea and in the following days they applied the workaround. They also tried to improve it but without success and eventually accepted a <strong>partial data loss</strong> as inevitable and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">reported their success back to the forum</a>.</p> +<blockquote> +<p><strong>Tip: when getting support from the community, providing feedback is the best token of appreciation</strong></p> +</blockquote> +<h1 id="getting-professional-help">Getting professional help<a class="zola-anchor" href="#getting-professional-help" aria-label="Anchor link for: getting-professional-help" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The <a href="https://gna.org/gitea-clinic/">Gna! Clinic</a> is a collective of individual and companies that provides professional services to Gitea admins. They are active members of the Gitea community who <a href="https://discourse.gitea.io/u/dachary/activity">help out</a> as volunteers. They can also be hired to resolve the more complicated cases.</p> +<p>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 <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">proposed their assistance</a> but although <a href="https://discourse.gitea.io/t/user-research-about-gitea-upgrade-experiences-call-for-volunteers/5063/2">well received</a>, it was not accepted.</p> +<p>When the Gitea admin explained how they chose to resolve the problem <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">on the forum</a>, it confirmed the workaround was viable and the root problem was identified. That was enough to figure out a fix for the underlying bug with <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a rather simple patch</a> that was merged <a href="https://github.com/go-gitea/gitea/pull/19629">and backported</a> in the following days. But it happened too late to avoid the data loss.</p> +<p>To summarize with a timeline, here is what happened:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login and a the Gitea admin tries to diagnose the problem</li> +<li>J+2: A message is sent <strong>to ask for help in the community</strong></li> +<li>J+2 to J+6: Three people in the community suggest ideas but <strong>the Gitea admin cannot figure out the root cause and is on the verge of accepting the loss of all Gitea data</strong> and restart from the git repositories</li> +<li>J+6: A <strong>workaround is suggested by the community</strong></li> +<li>J+7 to J+17: The Gitea admin applies the <strong>workaround and only looses part of the Gitea data</strong></li> +</ul> +<p>And in retrospect, here is what could have happened instead:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login</li> +<li>J+1: The Gitea admin <strong><a href="https://gna.org/gitea-clinic/">reaches out to someone at the Gna! Clinic</a></strong></li> +<li>J+2: The <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">logs of the Gitea instance</a> are analyzed, <strong>the root cause diagnosed</strong> and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a patch</a> is created to fix it.</li> +<li>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 <a href="https://github.com/go-gitea/gitea/pull/19629">the backport</a>. The Gitea admin runs the patched Gitea binary in the meantime. <strong>There is no data loss</strong>.</li> +</ul> +<p>It does not mean all upgrade problems can be resolved so easily. But it shows, with an example, that in some cases it makes sense to get professional help.</p> + + + diff --git a/tags/troubleshoot/index.html b/tags/troubleshoot/index.html new file mode 100644 index 0000000..a93e32b --- /dev/null +++ b/tags/troubleshoot/index.html @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + troubleshoot | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+ +
+

#troubleshoot

+ + RSS icon +
+ +
+ + + + +
+ + +
+ + diff --git a/tags/tutorial/atom.xml b/tags/tutorial/atom.xml new file mode 100644 index 0000000..7f3fd70 --- /dev/null +++ b/tags/tutorial/atom.xml @@ -0,0 +1,199 @@ + + + - tutorial + + + Zola + 2022-07-20T00:00:00+00:00 + https://gna.org/tags/tutorial/atom.xml + + 1.17 breaking changes episode 2: preserving a custom gitconfig + 2022-07-20T00:00:00+00:00 + 2022-07-20T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-2/ + <p>On June 21st, 2022 1.17.0-rc1 was published and the location of the gitconfig file moved to a new location, <a href="2022-06-23-1.17-breaking-episode-1">which required manual intervention</a>. This change impacted a large number of Gitea installations because the docker image tag <strong>latest</strong> <a href="https://mastodon.online/@hostea/108514134565401798">was set to 1.17.0-rc1</a> 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.</p> +<p>Unfortunately moving the git home directory in 1.17.0-rc1 was implemented in way that created a security problem. The <a href="https://github.com/go-gitea/gitea/pull/20114">fix that was merged in Gitea</a> to fix it requires moving the gitconfig file and was released July 19th, 2022 in 1.17.0-rc2.</p> +<p>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 <strong>latest</strong> 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.</p> +<p>In 1.17.0-rc2, a custom .gitconfig must be moved manually to the <a href="https://docs.gitea.io/en-us/config-cheat-sheet/#git-git">new git home directory</a> as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Data Root Path</strong>/home (which is <code>/data/gitea/home</code> in the example above).</li> +</ul> + + + + 1.17 breaking changes episode 1: preserving a custom gitconfig + 2022-06-22T00:00:00+00:00 + 2022-06-22T00:00:00+00:00 + + https://gna.org/blog/1-17-breaking-episode-1/ + <p>Before version 1.17, when Gitea needed to change the <a href="https://git-scm.com/docs/git-config">git configuration</a>, it modified the <code>$HOME/.gitconfig</code> file. For instance it would <a href="https://github.com/go-gitea/gitea/blob/release/v1.16/modules/git/git.go#L174-L177">set core.quotePath to false</a>:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[core] +</span><span> </span><span style="color:#bf616a;">quotePath </span><span>= </span><span style="color:#d08770;">false +</span></code></pre> +<p>When installing Gitea <a href="https://docs.gitea.io/en-us/install-with-docker/">from docker</a> or <a href="https://docs.gitea.io/en-us/install-with-docker-rootless/">rootless</a> or even <a href="https://docs.gitea.io/en-us/install-from-binary/">from binary</a> this <code>$HOME/.gitconfig</code> file belongs to a user that is <a href="https://docs.gitea.io/en-us/install-from-binary/#prepare-environment">dedicated to Gitea</a> and not used by anyone else.</p> +<p>However, if an Gitea installation was done differently and <code>$HOME/.gitconfig</code> 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:</p> +<pre data-lang="ini" style="background-color:#2b303b;color:#c0c5ce;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#b48ead;">[user] +</span><span> </span><span style="color:#bf616a;">name </span><span>= Jane Doe +</span><span> </span><span style="color:#bf616a;">email </span><span>= jane</span><span style="color:#b48ead;">@doe</span><span>.com +</span></code></pre> +<p>It is also possible that the file was modified manually by the Gitea admin for other reasons. In both there is a <strong>potential for breakage when upgrading to Gitea &gt;= 1.17 because the location of the file changed</strong>. It must be moved manually to the new location as follows:</p> +<ul> +<li>Figure out the directory where <code>$HOME/.gitconfig</code> must be moved by <a href="https://gna.org/blog/gentle-introduction-to-the-doctor/">running the doctor</a>:</li> +</ul> +<pre data-lang="shell" style="background-color:#2b303b;color:#c0c5ce;" class="language-shell "><code class="language-shell" data-lang="shell"><span>$ gitea --work-path /app/gitea -c /data/gitea/conf/app.ini doctor +</span><span>[1] Check paths and basic configuration +</span><span> - [I] Configuration File Path: &quot;/data/gitea/conf/app.ini&quot; +</span><span> - [I] Repository Root Path: &quot;/data/git/repositories&quot; +</span><span> - [I] Data Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Custom File Root Path: &quot;/data/gitea&quot; +</span><span> - [I] Work directory: &quot;/app/gitea&quot; +</span><span> - [I] Log Root Path: &quot;/data/gitea/log&quot; +</span><span>OK +</span></code></pre> +<ul> +<li>Copy the <code>$HOME/.gitconfig</code> file to the <strong>Repository Root Path</strong> (which is <code>/data/git/repositories</code> in the example above).</li> +</ul> +<p>The reason why this breaking change was introduced is to workaround <a href="https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/">a rare problem</a> impacting Gitea installations relying on networked volumes.</p> + + + + [tutorial] A gentle introduction to the gitea doctor + 2022-06-14T00:00:00+00:00 + 2022-06-14T00:00:00+00:00 + + https://gna.org/blog/gentle-introduction-to-the-doctor/ + <p>While helping people with their upgrades <a href="https://discourse.gitea.io/t/migration-from-1-2-to-1-16-8/5309">in the Gitea forum</a> or <a href="https://forum.gna.org/t/gitea-upgrade-from-1-14-1-to-1-16-8/90">at the Gna! clinic</a>, I realized that few Gitea admins know about the <a href="https://docs.gitea.io/en-us/command-line/#doctor"><code>gitea doctor</code></a> command and decided to write this blog post as a gentle introduction.</p> +<h3 id="an-apple-a-day-keeps-the-doctor-away">An apple a day keeps the doctor away<a class="zola-anchor" href="#an-apple-a-day-keeps-the-doctor-away" aria-label="Anchor link for: an-apple-a-day-keeps-the-doctor-away" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Or in our case, Gitea versions <a href="https://github.com/go-gitea/gitea/blob/v1.11.5/cmd/doctor.go">below 1.11.5</a>. Since then, the <code>gitea doctor</code> 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 <code>gitea doctor</code> was backported to <a href="https://github.com/go-gitea/gitea/blob/v1.10.5/cmd/doctor.go">Gitea 1.10.5</a> and <a href="https://github.com/go-gitea/gitea/blob/v1.10.6/cmd/doctor.go">Gitea 1.10.6</a> and may be of help if you run this particular version and are facing the problem that motivated the backport.</p> +<p>With each version <code>gitea doctor</code> improves and gains new capabilities. For instance, in Gitea 1.17 it becomes aware of <a href="https://github.com/go-gitea/gitea/pull/19731">orphaned pull requests</a> and is able to fix them. If such a problem exists in Gitea 1.16, it does not know about it.</p> +<h3 id="calling-the-doctor">Calling the doctor<a class="zola-anchor" href="#calling-the-doctor" aria-label="Anchor link for: calling-the-doctor" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>In the following, examples are based on a Gitea 1.16.8 instance you can run as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker run</span><span style="color:#bf616a;"> --name</span><span> gitea</span><span style="color:#bf616a;"> -p</span><span> 3000:3000</span><span style="color:#bf616a;"> -e</span><span> GITEA__security__INSTALL_LOCK=true</span><span style="color:#bf616a;"> -d</span><span> gitea/gitea:1.16.8-rootless +</span><span style="color:#bf616a;">$</span><span> docker exec gitea gitea admin user create</span><span style="color:#bf616a;"> --admin --username</span><span> root</span><span style="color:#bf616a;"> --password</span><span> admin1234</span><span style="color:#bf616a;"> --email</span><span> root@example.com +</span><span style="color:#bf616a;">$</span><span> docker exec gitea mkdir /var/lib/gitea/data/log +</span></code></pre> +<p>And then you can go to the <a href="https://127.0.0.1:3000/">web interface</a> to create a <code>test</code> repository, with an initial <code>README.md</code> file. When this is done the doctor can be called as follows:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --all +</span><span style="color:#bf616a;">[1]</span><span> Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Configuration File Path: &quot;</span><span style="color:#a3be8c;">/etc/gitea/app.ini</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Repository Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/git/repositories</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Data Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Custom File Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/custom</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Work directory: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Log Root Path: &quot;</span><span style="color:#a3be8c;">/var/lib/gitea/data/log</span><span>&quot; +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[2]</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[3]</span><span> Check Database Version +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[4]</span><span> Check consistency of database +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[5]</span><span> Check if user with wrong type exist +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[6]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[7]</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> ScriptType bash is on the current PATH at /bin/bash +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[8]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[9]</span><span> Recalculate Stars number for all user +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[10]</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> 0 old archives in repository need to be deleted +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[11]</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[12]</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Found 0 broken repo_units +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[13]</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> 0 PRs with incorrect mergebases of 0 PRs total in 1 repos +</span><span style="color:#bf616a;">OK +</span><span style="color:#bf616a;">[14]</span><span> Check git-daemon-export-ok files +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>I</span><span style="color:#b48ead;">]</span><span> Checked 1 repositories, 0 need updates. +</span></code></pre> +<h3 id="what-does-the-doctor-know">What does the doctor know?<a class="zola-anchor" href="#what-does-the-doctor-know" aria-label="Anchor link for: what-does-the-doctor-know" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>Although the <code>doctor</code> can be compared to <a href="https://en.wikipedia.org/wiki/Fsck">fsck(8)</a>, it does not know everything. It took decades for <code>fsck</code> 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 <code>fsck</code> cannot recover from a data loss.</p> +<p>The first <code>doctor</code> 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:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --list +</span><span style="color:#bf616a;">Default</span><span> Name Title +</span><span style="color:#bf616a;">*</span><span> paths Check paths and basic configuration +</span><span> </span><span style="color:#bf616a;">storages</span><span> Check if there is garbage storage files +</span><span style="color:#bf616a;">*</span><span> check-db-version Check Database Version +</span><span> </span><span style="color:#bf616a;">check-db-consistency</span><span> Check consistency of database +</span><span style="color:#bf616a;">*</span><span> check-user-type Check if user with wrong type exist +</span><span style="color:#bf616a;">*</span><span> authorized-keys Check if OpenSSH authorized_keys file is up-to-date +</span><span> </span><span style="color:#bf616a;">script-type</span><span> Check if SCRIPT_TYPE is available +</span><span> </span><span style="color:#bf616a;">hooks</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">recalculate-stars-number</span><span> Recalculate Stars number for all user +</span><span> </span><span style="color:#bf616a;">check-old-archives</span><span> Check old archives +</span><span> </span><span style="color:#bf616a;">enable-push-options</span><span> Enable push options +</span><span> </span><span style="color:#bf616a;">fix-broken-repo-units</span><span> Check for incorrectly dumped repo_units (See </span><span style="color:#65737e;">#16961) +</span><span> </span><span style="color:#bf616a;">recalculate-merge-bases</span><span> Recalculate merge bases +</span><span> </span><span style="color:#bf616a;">check-git-daemon-export-ok</span><span> Check git-daemon-export-ok files +</span></code></pre> +<p>And then call the <code>check</code> that looks interesting:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> authorized-keys +</span><span style="color:#bf616a;">[1]</span><span> Check if OpenSSH authorized_keys file is up-to-date +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>The challenge is to figure out which <code>check</code> does what and at the moment the best source of information is ... <a href="https://github.com/go-gitea/gitea/tree/v1.16.8">the sources</a> themselves. The <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/cmd/doctor.go">doctor.go</a> command is the entry point and <a href="https://github.com/go-gitea/gitea/tree/v1.16.8/modules/doctor">the doctor directory</a> contains the rest.</p> +<p>Some <code>checks</code> are straightforward to understand, even if you do not know Go, such as <a href="https://github.com/go-gitea/gitea/blob/v1.16.8/modules/doctor/authorizedkeys.go">the authorized-keys check</a>. Others are much more involved and your best chance is to <a href="https://matrix.to/#/#gitea:matrix.org">ask the Gitea chatroom</a> for help.</p> +<h3 id="is-it-going-to-hurt">Is it going to hurt?<a class="zola-anchor" href="#is-it-going-to-hurt" aria-label="Anchor link for: is-it-going-to-hurt" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>By default the doctor (very much like <code>fsck -N</code>) 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 <strong>[I]</strong> (which indicates an information) and <strong>[W]</strong> 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 <strong>[I]</strong>, <a href="https://github.com/go-gitea/gitea/pull/19836">which has been fixed</a> in a more recent version of the doctor.</p> +<p>Now let's do something bad: remove the permissions from a hook in our repository:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea chmod</span><span style="color:#bf616a;"> -x</span><span> /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive +</span></code></pre> +<p>Run the doctor with the <code>check</code> supposed to find that out:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>Ask it to fix this with the <code>--fix</code> flag:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks</span><span style="color:#bf616a;"> --fix +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> Regenerated hooks for root/test +</span><span> </span><span style="color:#bf616a;">- </span><span style="color:#b48ead;">[</span><span>W</span><span style="color:#b48ead;">]</span><span> old hook file /var/lib/gitea/git/repositories/root/test.git/hooks/post-receive is not executable +</span></code></pre> +<p>And run it one last time to check all is well:</p> +<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> docker exec gitea gitea doctor</span><span style="color:#bf616a;"> --run</span><span> hooks +</span><span style="color:#bf616a;">[1]</span><span> Check if hook files are up-to-date and executable +</span><span style="color:#bf616a;">OK +</span></code></pre> +<p>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 <code>doctor.log</code> file in the directory from which it runs. Or it can be displayed on the standard output with <code>--log-file -</code>, which is most convenient when running in docker.</p> +<h3 id="going-further">Going further<a class="zola-anchor" href="#going-further" aria-label="Anchor link for: going-further" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>If that was helpful to you, I would very much appreciate if you <a href="https://mastodon.online/@dachary">send me a message on Mastodon</a>. It will encourage me to write more blog posts to share what I learn about Gitea. Even better: you could <a href="https://github.com/go-gitea/gitea/pulls">send a pull request</a> to improve the doctor and help it mature.</p> + + + diff --git a/tags/tutorial/index.html b/tags/tutorial/index.html new file mode 100644 index 0000000..1df174f --- /dev/null +++ b/tags/tutorial/index.html @@ -0,0 +1,372 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tutorial | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + diff --git a/tags/upgrade/atom.xml b/tags/upgrade/atom.xml new file mode 100644 index 0000000..66953f8 --- /dev/null +++ b/tags/upgrade/atom.xml @@ -0,0 +1,132 @@ + + + - upgrade + + + Zola + 2022-05-28T00:00:00+00:00 + https://gna.org/tags/upgrade/atom.xml + + [solved] Gitea 1.15 and up: path not found or permission denied + 2022-05-28T00:00:00+00:00 + 2022-05-28T00:00:00+00:00 + + https://gna.org/blog/path-not-found/ + <p>In Gitea 1.15 the <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/custom/conf/app.example.ini">app.example.ini</a> file was changed to <a href="https://github.com/go-gitea/gitea/commit/4a84022d2559ccfc99960c7c654ee8b9b38664f7">comment out most of the values</a>. The assumption was that all values exactly matched the defaults <a href="https://github.com/go-gitea/gitea/blob/main/modules/setting/setting.go">in the source code</a>. However, there are differences, for instance for <a href="https://github.com/go-gitea/gitea/blob/cfb4c23a5009b9c236d48ac0bc156577c7d70741/modules/setting/setting.go#L771">APP_DATA_PATH</a>. Before Gitea 1.15, <code>app.example.ini</code> contained:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>directory from which the Gitea server was running</strong>. In Gitea 1.15 up to 1.16, it was commented out:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>and the path was relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. </p> +<p>When a distribution such as voidlinux <a href="https://github.com/void-linux/void-packages/blob/master/srcpkgs/gitea/patches/config.patch">uses app.example.ini</a> as a base for the Gitea package, this change indirectly creates a regression and an upgrade of Gitea <a href="https://github.com/go-gitea/gitea/issues/19367">fails with errors</a> such as <code>unable to open level db at data/data/queues/common: mkdir data: permission denied</code>. The regression did not show as soon as Gitea 1.15 became available in voidlinux because the package <a href="https://github.com/void-linux/void-packages/blob/7fc9190f0e0d557dd5031e68df4e183892d4315b/srcpkgs/gitea/patches/config.patch#L62">explicitly set <code>APP_DATA_PATH</code></a>. But this <a href="https://github.com/void-linux/void-packages/commit/19d986a2cae9ce73d32552ddb62443b5e7fa13e2">changed when Gitea 1.15.6 was packaged</a> and once the value was commented out, upgrading triggered the problem. This was worked around six month later with the <a href="https://github.com/void-linux/void-packages/commit/44b6c96fa12ce9d993c7a2ac9486d892735b7e3a">Gitea 1.16.8</a> package.</p> +<p>The <code>APP_DATA_PATH</code> directory is not the only one, the <code>[log] ROOT_PATH</code> is another example. There is an <a href="https://github.com/go-gitea/gitea/pull/19815">ongoing effort</a> 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 <code>app.ini</code> file will be interpreted differently. In the case of <code>APP_DATA_PATH</code>, both:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>APP_DATA_PATH = data +</span></code></pre> +<p>and:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>; APP_DATA_PATH = data +</span></code></pre> +<p>will be interpreted to be relative to the <strong>work path directory</strong>, as provided either via the --work-path argument or the <code>GITEA_WORK_DIR</code> environment variable. Every Gitea installation using <strong>APP_DATA_PATH = data</strong> will need to update the value to be an absolute path such as <strong>/var/lib/gitea/data</strong> so that it keeps pointing to the expected directory.</p> +<p>In order to prepare for the change or ensure the consistency of all path, there fortunately is a very simple <strong>solution: always use absolute paths in the <code>app.ini</code> configuration file</strong>.</p> + + + + [solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else + 2022-05-15T00:00:00+00:00 + 2022-05-15T00:00:00+00:00 + + https://gna.org/blog/unsafe-repository-is-owned-by-someone-else/ + <p>April 12, 2022 version <a href="https://lore.kernel.org/git/xmqqv8veb5i6.fsf@gitster.g/">git v2.35.2</a> was released and addresses a security issue <a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a>. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as <a href="https://security-tracker.debian.org/tracker/CVE-2022-24765">Debian GNU/Linux</a>, <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<p><strong>If Gitea runs as user <code>foo</code>, calls a patched Git version and a parent directory of the git repositories is owned by a user other than <code>foo</code>, it will fail</strong> with a message such as:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>Failed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository (&#39;/data/git/repositories/git/data.git&#39; is owned by someone else) +</span></code></pre> +<p>This started to show in the past few weeks to <a href="https://github.com/go-gitea/gitea/issues/19455">users running the Gitea binary on Windows</a> who also independently installed git v2.36. And then to people running <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106331149">Gitea from snap</a>, on <a href="https://github.com/go-gitea/gitea/issues/19455#issuecomment-1106312061">a Synology NAS</a> and then people running from <a href="https://github.com/go-gitea/gitea/blob/main/Dockerfile#L2">Gitea docker images</a> which is based on <a href="https://www.alpinelinux.org/releases/">Alpine</a>.</p> +<h3 id="workarounds">Workarounds<a class="zola-anchor" href="#workarounds" aria-label="Anchor link for: workarounds" + ><span class="anchor-icon">#</span></a +> +</h3> +<ul> +<li>If using <a href="https://hub.docker.com/r/gitea/gitea">Gitea docker images</a>: +<ul> +<li>upgrade to <a href="https://github.com/go-gitea/gitea/pull/19876">Gitea &gt;=1.16.9</a> or 1.17, both have git &gt;=2.36</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +<li>If the Gitea binary was installed independently of git, upgrade git to a version that is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a> and disable the security check entirely with: +<ul> +<li>impersonate the <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">user dedicated to Gitea</a> (usually git)</li> +<li><code>git config --global --replace-all safe.directory '*'</code></li> +</ul> +</li> +</ul> +<h3 id="bug-fix">Bug fix<a class="zola-anchor" href="#bug-fix" aria-label="Anchor link for: bug-fix" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>The <a href="https://github.com/go-gitea/gitea/pull/19870">bug fix</a> is for Gitea to ensure <code>git config --global --replace-all safe.directory '*'</code> is set on its <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">dedicated user</a> when it initializes. It is effective on the condition that the git CLI version is <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory">greater or equal to 2.36</a>.</p> +<h3 id="bug-fix-rationale">Bug fix rationale<a class="zola-anchor" href="#bug-fix-rationale" aria-label="Anchor link for: bug-fix-rationale" + ><span class="anchor-icon">#</span></a +> +</h3> +<p>It is safe to <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs">disable the security check in Gitea</a>. It is not vulnerable to <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong> because it calls the git CLI <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/command.go#L160">after changing its working directory</a> to be the git repository targeted by the command (for instance <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/diff.go#L38-L45">diff</a>) or a temporary directory. Therefore <strong>it will not explore the parent directories looking for a git configuration file</strong>.</p> +<p>The security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and <strong>not because a parent directory is owned by an unexpected user</strong>. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in <strong><a href="https://github.com/git-for-windows/git/security/advisories/GHSA-vw2c-22j4-2fh2">CVE-2022-24765</a></strong>.</p> +<p>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.</p> +<p>Gitea runs under a dedicated user, either when installed <a href="https://docs.gitea.io/en-us/install-from-binary/#recommended-server-configuration">from binary</a> or from <a href="https://docs.gitea.io/en-us/install-with-docker/">docker</a> and <a href="https://github.com/go-gitea/gitea/blob/main/modules/git/git.go#L196-L207">modifies the global git configuration</a> depending on the git version at initialization time. Fixing the problem can therefore be done by <a href="https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/50/diffs#bcd72ff867cbd1ddd5b6518c3a05b5f1a6021286_209_209">disabling the security check in the global git config file at initialization time</a>. It also requires a minimum version of git 2.36 to be installed, which is the case for Gitea docker images with <a href="https://github.com/go-gitea/gitea/pull/19876">versions &gt;= 1.16.9</a>.</p> + + + + [solved] blank or error 500 page after login + 2022-05-08T00:00:00+00:00 + 2022-05-08T00:00:00+00:00 + + https://gna.org/blog/blank-or-error-500-page-after-login/ + <p>The <a href="https://docs.gitea.io/en-us/upgrade-from-gitea/#upgrade-from-binary">instructions to upgrade a Gitea instance</a> only require three to four steps. They work fine most of the time but the documentation is lacking a &quot;Troubleshooting&quot; 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.</p> +<p>An <a href="https://forum.gna.org/t/things-to-know-about-gitea-upgrades/39">inventory of the known upgrade issues</a> was started to figure out how to structure such a section in the documentation. The <a href="https://blog.gitea.io/">release notes</a> were analyzed all the way back to <a href="https://github.com/go-gitea/gitea/releases/tag/v1.9.6">Gitea 1.9.6</a> and the work is still in progress. Here is a sample of the tips that will be included:</p> +<ul> +<li>Upgrade directly to the latest Gitea version, there is no need to upgrade to intermediate versions.</li> +<li>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.</li> +<li>etc.</li> +</ul> +<p>However, even with the best documentation, someone will eventually <strong>run into an new problem</strong> and fixing it without compromising the integrity of the data will be challenging. This is best demonstrated by a real world example that was concluded a few days ago.</p> +<h1 id="getting-help-from-the-community">Getting help from the community<a class="zola-anchor" href="#getting-help-from-the-community" aria-label="Anchor link for: getting-help-from-the-community" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>After <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">upgrading a Gitea intsance from 1.9.6 to 1.16.5</a> the tests conducted manually did not uncover any problem. However, after going to production, some users saw a blank page after login and had to manually type the URL of the project they wanted to see in the browser. The person in charge of the upgrade never had to diagnose Gitea problem and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051">reached out in the Gitea forum</a>.</p> +<blockquote> +<p><strong>Tip: explain the problem in a public forum as early as possible to get help from the community</strong></p> +</blockquote> +<p>In their post in the forum they explained how they attempted to diagnose the problem and how why they thought that only users created a few years ago were impacted. It was a detailed analysis that was concluded with a partial copy of the logs. It was unfortunately missing <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">key information</a> that was provided only three days later. In the meantime, as they could not figure out the source of the problem, they were on the <strong>verge of <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/11">accepting the loss of all the Gitea database</a> and start over from the repositories</strong>. However, once all the details were available, <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">a workaround</a> was suggested in the forum.</p> +<blockquote> +<p><strong>Tip: focus more on providing detailed facts than exposing the attempted diagnostic</strong></p> +</blockquote> +<p>There was hope to fix Gitea and in the following days they applied the workaround. They also tried to improve it but without success and eventually accepted a <strong>partial data loss</strong> as inevitable and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">reported their success back to the forum</a>.</p> +<blockquote> +<p><strong>Tip: when getting support from the community, providing feedback is the best token of appreciation</strong></p> +</blockquote> +<h1 id="getting-professional-help">Getting professional help<a class="zola-anchor" href="#getting-professional-help" aria-label="Anchor link for: getting-professional-help" + ><span class="anchor-icon">#</span></a +> +</h1> +<p>The <a href="https://gna.org/gitea-clinic/">Gna! Clinic</a> is a collective of individual and companies that provides professional services to Gitea admins. They are active members of the Gitea community who <a href="https://discourse.gitea.io/u/dachary/activity">help out</a> as volunteers. They can also be hired to resolve the more complicated cases.</p> +<p>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 <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/13">proposed their assistance</a> but although <a href="https://discourse.gitea.io/t/user-research-about-gitea-upgrade-experiences-call-for-volunteers/5063/2">well received</a>, it was not accepted.</p> +<p>When the Gitea admin explained how they chose to resolve the problem <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/14">on the forum</a>, it confirmed the workaround was viable and the root problem was identified. That was enough to figure out a fix for the underlying bug with <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a rather simple patch</a> that was merged <a href="https://github.com/go-gitea/gitea/pull/19629">and backported</a> in the following days. But it happened too late to avoid the data loss.</p> +<p>To summarize with a timeline, here is what happened:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login and a the Gitea admin tries to diagnose the problem</li> +<li>J+2: A message is sent <strong>to ask for help in the community</strong></li> +<li>J+2 to J+6: Three people in the community suggest ideas but <strong>the Gitea admin cannot figure out the root cause and is on the verge of accepting the loss of all Gitea data</strong> and restart from the git repositories</li> +<li>J+6: A <strong>workaround is suggested by the community</strong></li> +<li>J+7 to J+17: The Gitea admin applies the <strong>workaround and only looses part of the Gitea data</strong></li> +</ul> +<p>And in retrospect, here is what could have happened instead:</p> +<ul> +<li>J+1: The <strong>problem is discovered</strong> by users who see a blank page after login</li> +<li>J+1: The Gitea admin <strong><a href="https://gna.org/gitea-clinic/">reaches out to someone at the Gna! Clinic</a></strong></li> +<li>J+2: The <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/12">logs of the Gitea instance</a> are analyzed, <strong>the root cause diagnosed</strong> and <a href="https://discourse.gitea.io/t/blank-page-after-login/5051/17">a patch</a> is created to fix it.</li> +<li>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 <a href="https://github.com/go-gitea/gitea/pull/19629">the backport</a>. The Gitea admin runs the patched Gitea binary in the meantime. <strong>There is no data loss</strong>.</li> +</ul> +<p>It does not mean all upgrade problems can be resolved so easily. But it shows, with an example, that in some cases it makes sense to get professional help.</p> + + + diff --git a/tags/upgrade/index.html b/tags/upgrade/index.html new file mode 100644 index 0000000..e8cddfe --- /dev/null +++ b/tags/upgrade/index.html @@ -0,0 +1,372 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + upgrade | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + diff --git a/tmp-logo.png b/tmp-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..def7771b9558f28635a61b13eece8ae0c74c38bf GIT binary patch literal 3828 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + Terms of Service | Gna!: Managed Gitea Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + +
+

Terms of Service

+
+

CHATONS Charter compliance# +

+

Gna! is committed to comply with the CHATONS charter.

+

All applications and infrastructure software used in Gna! are published under a Free Software license.

+

User content# +

+

Gna! has no copyright claim over content uploaded by its 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.

+

Support# +

+

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.

+

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.

+

Security# +

+

Security updates are applied via unattended upgrades.

+

Backups# +

+

Backups are managed via the Enough backup playbook so that there exist at least one backup of each machine in a geographical location that is different from the one where it runs.

+

Disaster recovery involves rebooting the machine that was lost using a backup, either within a libvirt hypervisor or an OpenStack tenant.

+

GDPR compliance# +

+

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 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 Gna! is Loïc Dachary, 12 bd Magenta, 75010 Paris.

+

Human contact# +

+

Gna! users are kindly invited to get in touch with loic@dachary.org and organize a meeting in person to discuss the services provided.

+ +
+
+ + +
+ + +
+ +