From b5dfe4c2a37d9b8440244c70b7ce331449b458cb Mon Sep 17 00:00:00 2001 From: Jesus Herman-Marina Date: Wed, 15 Jun 2022 15:55:20 +0200 Subject: [PATCH] Update readme Signed-off-by: Jesus Herman-Marina --- .gitignore | 1 + README.md | 298 ++++++------------------- assets/images/s3gw-roadmap.jpg | Bin 48324 -> 109367 bytes build-ui/README.md => docs/build-ui.md | 0 docs/build.md | 113 ++++++++++ docs/contributing.md | 11 + docs/developing.md | 89 ++++++++ docs/env-k3s.md | 227 +++++++++++++++++++ docs/env-k8s.md | 146 ++++++++++++ docs/s3-compatibility-table.md | 29 +++ docs/s3gw-repos.md | 7 + env/README.md | 49 ---- 12 files changed, 691 insertions(+), 279 deletions(-) rename build-ui/README.md => docs/build-ui.md (100%) create mode 100644 docs/build.md create mode 100644 docs/contributing.md create mode 100644 docs/developing.md create mode 100644 docs/env-k3s.md create mode 100644 docs/env-k8s.md create mode 100644 docs/s3-compatibility-table.md create mode 100644 docs/s3gw-repos.md delete mode 100644 env/README.md diff --git a/.gitignore b/.gitignore index 21a422c..eb23a71 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /.idea/ .vagrant .vscode +.DS_Store *.swp diff --git a/README.md b/README.md index 3728096..be3ac87 100644 --- a/README.md +++ b/README.md @@ -1,265 +1,89 @@ -# s3gw core +# s3gw +GitHub license +GitHub Workflow Status +GitHub issues -S3-compatible Gateway based on Ceph RGW, using a non-RADOS backend for + +An S3-compatible Gateway based on Ceph RGW, using a non-RADOS backend for standalone usage. -This project shall provide the required infrastructure to build a container +This project provides the required infrastructure to build a container able to run on a kubernetes cluster, providing S3-compatible endpoints to applications. -Table of Contents -================= - -* [Roadmap](#roadmap) -* [How To](#how-to) - * [Introduction](#introduction) - * [Requirements](#requirements) - * [Running](#running) -* [Building the s3gw container image](#building-the-s3gw-container-image) - * [Prerequisites](#prerequisites) - * [Building the radosgw binary](#building-the-radosgw-binary) - * [Build the s3gw container image](#build-the-s3gw-container-image) - * [Running the s3gw container](#running-the-s3gw-container) -* [Building the s3gw-UI image](#building-the-s3gw-ui-image) -* [Building and running a complete environment](#building-and-running-a-complete-environment) -* [When things don't work](#when-things-dont-work) -* [License](#license) - - - -## Roadmap - -We are currently focusing on delivering a proof-of-concept, demonstrating the -feasibility of the project. We call this deliverable the Minimum Viable Product. - -The image below represents what we believe to be our current roadmap. We are on -the MVP phase right now. Once we achieve this deliverable, and depending on user -feedback being positive, amongst other factors that may yet be determined, we -shall proceed to the next phase of development. - -![S3GW Roadmap](/assets/images/s3gw-roadmap.jpg) - -We also keep track of our items in an Aquarist Labs organization dedicated -[project](https://github.com/orgs/aquarist-labs/projects/5/views/1). - -## How To - -### Introduction - -Given we are still setting up the project, figuring out requirements, and -specific details about direction, we are dedicating most of our efforts to -testing Ceph's RGW as a standalone daemon using a non-RADOS storage backend. - -The backend in question is called `dbstore`, backed by a SQLite database, and -is currently provided by RGW. - -In order to ensure we all test from the same point in time, we have a forked -version of the latest development version of Ceph, which can be found -[here](https://github.com/aquarist-labs/ceph.git). We are working using the -[`s3gw` branch](https://github.com/aquarist-labs/ceph/tree/s3gw) as our base of -reference. - -Keep in mind that this development branch will likely closely follow Ceph's -upstream main development branch, and is bound to change over time. We intend -to contribute whatever patches we come up with to the original project, thus -we need to keep up with its ever evolving state. - -### Requirements - -We are relying on built Ceph sources to test RGW. We don't have a particular -preference on how one achieves this. Some of us rely on containers to build -these sources, while others rely on whatever OS they have on their local -machines to do so. Eventually we intend to standardize how we obtain the -RGW binary, but that's not in our immediate plans. +# Table of Contents -If one is new to Ceph development, the best way to find out how to build -these sources is to refer to the -[original documentation](https://docs.ceph.com/en/pacific/install/build-ceph/#id1). +- [s3gw](#-s3gw) +- [Roadmap](#-roadmap) +- [Quickstart](#-quickstart) + - [Helm chart](#helm-chart) + - [Podman](#podman) + - [Docker](#docker) +- [License](#license) +- [Developing the s3gw](#-developing-the-s3gw) -Because we are in a fast development effort at the moment, we have chosen to -apply patches needed to make our endeavour work on our own fork of the Ceph -repository. This allows us fiddle with the Ceph source while experimenting, -without polluting the upstream Ceph repository. We do intend to upstream any -patches that make sense though. +# 🛣 Roadmap -That said, we have the `aquarist-labs/ceph` repository as a requirement for -this project. We can't guarantee that our instructions, or the project as a -whole, will work flawlessly with the original Ceph project from `ceph/ceph`. +![Roadmap](/assets/images/s3gw-roadmap.jpg) -### Running +The aim is to deliver a Minumum Viable Product (MVP). In a nutshell, an MVP seeks to collect the maximum amount of validated learning about our users in a short time. -One should be able to get a standalone RGW running following these steps: +Based on the user feedback we collect, we develop features that add up towards the goal of delivering the MVP. We're working on phases: -``` -$ cd build/ -$ mkdir -p dev/rgw.foo -$ bin/radosgw -i foo -d --no-mon-config --debug-rgw 15 \ - --rgw-backend-store dbstore \ - --rgw-data $(pwd)/dev/rgw.foo \ - --run-dir $(pwd)/dev/rgw.foo -``` - -Once the daemon is running, and outputting its logs to the terminal, one can -start issuing commands to the daemon. We rely on `s3cmd`, which can be found -on [github](https://github.com/s3tools/s3cmd) or obtained through `pip`. - -`s3cmd` will require to be configured to talk to RGW. This can be achieved by -first running `s3cmd -c $(pwd)/.s3cfg --configure`. By default, the configuration -file would be put under the user's home directory, but for our testing purposes -it might be better to place it somewhere less intrusive. - -During the interactive configuration a few things will be asked, and we -recommend using these answers unless one's deployment is different, in which -case these will need to be properly adapted. - -``` - Access Key: 0555b35654ad1656d804 - Secret Key: h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q== - Default Region: US - S3 Endpoint: 127.0.0.1:7480 - DNS-style bucket+hostname:port template for accessing a bucket: 127.0.0.1:7480/%(bucket) - Encryption password: **** - Path to GPG program: /usr/bin/gpg - Use HTTPS protocol: False - HTTP Proxy server name: - HTTP Proxy server port: 0 -``` +**Phase 1** +* Use SQLite as storage backend. +* Running the s3gw in a container. +* Be able to run basic S3 operations. +* Ability to deploy the S3 Gateway on a K8s or K3s cluster with. +* [Design mockups](https://www.figma.com/file/IeozuvvYlrKBs7qm030dyo/S3-Wireframe?node-id=0%3A1) for User management & an S3 explorer. -Please note that both the `Access Key` and the `Secret Key` need to be copied -verbatim. Unfortunately, at this time, the `dbstore` backend statically creates -an initial user using these values. +----- -Should the configuration be correct, one will then be able to issue commands -against the running RGW. E.g., `s3cmd mb s3://foo`, to create a new bucket. +**Phase 2** +* Basic S3 explorer UI +* Helm chart +* Define & start work on a file-based backend +* Implement CI/CD -## Building the s3gw container image +----- -This documentation will guide you through the several steps to build the -`s3gw` container image. +**Phase 3** +* File-based backend integration +* Increased support for S3 functional features +* S3 explorer UI +* User management UI +* tba -> **NOTE:** The absolute paths mentioned in this document may be different -> on your system. +----- -### Prerequisites -Make sure you've installed the following applications: +**Project board** -- podman -- buildah +We track our progress in this [Github project](https://github.com/orgs/aquarist-labs/projects/5/views/1) board. -Optionally, if you prefer building an `s3gw` container image with Docker you will need: - -- docker - -The build scripts expect the following directory hierarchy. - -``` -| -|- ceph/ -| |- build/ -| ... -| -|- s3gw-core/ - |- build/ - ... -``` - -### Building the radosgw binary -To build the `radosgw` binary, a containerized build environment is used. -This container can be built by running the following command: - -``` -$ cd ~/git/s3gw-core/build -$ podman build --tag build-radosgw -f ./Dockerfile.build-radosgw -``` - -If you experience connection issues while downloading the packages to be -installed in the build environment, try using the `--net=host` -command line argument. - -After the build environment container image has been build once, the -`radosgw` binary will be build automatically when the container is -started. Make sure the path to the Ceph Git repository in the host -file system is correct, e.g. `../../ceph`, `~/git/ceph`, ... - -``` -$ podman run --replace --name build-radosgw -v ../../ceph/:/srv/ceph/ localhost/build-radosgw -``` - -By default, the `radosgw` binary file will be build in `Debug` mode. For production -builds set the environment variable `CMAKE_BUILD_TYPE` to `Release`, `RelWithDebInfo` -or `MinSizeRel`. Check the [CMAKE_BUILD_TYPE documentation](https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html) -for more information. - -``` -$ podman run --replace --name build-radosgw -e CMAKE_BUILD_TYPE="MinSizeRel" -v ../../ceph/:/srv/ceph/ localhost/build-radosgw -``` - -### Build the s3gw container image -If the Ceph `radosgw` binary is compiled, the container image can be build -with the following commands: - -``` -$ cd ~/git/s3gw-core/build -$ ./build-container.sh -``` - -By default, this will build an `s3gw` image using podman. -In order to build an `s3gw` image with Docker, you can run: - -``` -$ cd ~/git/s3gw-core/build -$ CONTAINER_ENGINE=docker ./build-container.sh -``` - -The container build script expects the `radosgw` binary at the relative -path `../ceph/build/bin`. This can be customized via the `CEPH_DIR` -environment variable. - -The container image name is `s3gw` by default. This can be customized via -the environment variable `IMAGE_NAME`. - -### Running the s3gw container -Finally, you can run the `s3gw` container with the following command: +# 🚀 Quickstart +## Helm chart +An easy way to deploy the S3 Gateway on your Kubernetes cluster is via a Helm chart. +We've created a dedicated repository for it, which can be found [here](https://github.com/aquarist-labs/s3gw-charts). +## Podman ``` $ podman run --replace --name=s3gw -it -p 7480:7480 localhost/s3gw ``` -or, when using Docker: - +## Docker ``` -$ docker run -p 7480:7480 localhost/s3gw -``` -By default, the container will run with the following arguments: - -```text ---rgw-backend-store dbstore ---debug-rgw 1 +docker pull ghcr.io/aquarist-labs/s3gw:latest ``` -You can override them passing different values when starting the container. -For example if you want to increase `radosgw` logging verbosity, you could run: +In order to run the Docker container: -```shell -$ podman run -p 7480:7480 localhost/s3gw --rgw-backend-store dbstore --debug-rgw 15 +``` +docker run -p 7480:7480 localhost/s3gw ``` -## Building the s3gw-UI image - -You can refer to the [build-ui](./build-ui/) section to build the s3gw-UI image. - -## Building and running a complete environment - -You can refer to the [environment](./env/) section to build a fully provisioned Kubernetes cluster. - -## When things don't work - -If one finds a problem, as one is bound to at this point in time, we encourage -everyone to check out our [issues list](https://github.com/aquarist-labs/s3gw-core/issues) -and either file a new issue if the observed behavior has not been reported -yet, or to contribute with further details to an existing issue. +For more information on building and running a container, please read our [guide](./build/). -## License +# License Licensed under the Apache License, Version 2.0 (the "License"); you may not use licensed files except in compliance with the License. @@ -275,3 +99,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +# 📖 Developing the s3gw +- [Developing the S3 Gateway](./docs/developing#----developing-the-s3-gateway) +- [How to build your own containers](./docs/build#---how-to-build-your-own-containers) + * [Building the s3gw container image](./docs/build#building-the-s3gw-container-image) + * [Building the s3gw-UI image](./docs/build#building-the-s3gw-ui-image) +- [Building a K3s & K8s environment running s3gw with Longhorn](./docs/env.md#building-a-k3s---k8s-environment-running-s3gw-with-longhorn) + * [K3s Setup](./docs/env-k3s.md) + * [K8s Setup](./docs/env-k8s.md) +- [S3 API compatibility table](./docs/s3-compatibility-table) +- [S3GW Repositories](#s3gw-repositories) +- [Contributing](./docs/contributing.md#contributing) + * [Reporting an issue](./docs/contributing.md#reporting-an-issue) + * [Discussion](./docs/contributing.md#discussion) diff --git a/assets/images/s3gw-roadmap.jpg b/assets/images/s3gw-roadmap.jpg index 712b2dae5834c85b6366485b2b25282dc70b364e..fe8d3adccc8f85c7b2590f8384c4ca6654b23b81 100644 GIT binary patch literal 109367 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

t?eD&Q??S9BXyDv0b)^cO!(Of9V{o+bVBx-eyzl zQyGV1{Mc8UPOzzwYl;jgnmW&)XGK|% z?YGP-#|8+k>{+{RR93_`0X7*_3?}efr;5I={sHK#r6*YQtW zg^m(Ytn5y%#I{fKD$DQ;>*K>hXY#|7k>9!>8QdV<#6??(^pVoAP=ELTEUa)3$o5u} zu3<#CjLysnhx46Bjw9671x|;gbc%Y?GkYKs1yYBbjoYrEZ=I^}ztIA22O3y>T8~NEjw5dpquLOe5z}N zb8&MMd9nmQ^PX6&43<7?m+rV(Ud=U%>sy_)+WFV$#aDK}tfeg*T$OF<9MD#@6~o>h zB{n7c$@bZu*>vz7i6(n_5eA4#^*x#t1oSfkg;kh$$v3*|VCxdY!h9AtXIn*0bR}Bu-sp8AZ zLHbD@P#%KIi2i>1oJ8p9%@*e49tRw?YK$Ch?Q(f`m0wKj z1T+$#4CFp`N{%@oK3USkCe2ky58aA#8y5a35v~-9h2EjPRKnjQaXcNsnN!9cD3)&v zoCMo4%I`jd%0aST#bq9%8IA!68F@81d0*xyCED||M3GfaAMz5qqBs-m>U_9)yetCO zVE(oZ0UJ#)I)zJhgdO!%Q0}B`cv2mQUF^$%dj|d%S^}={;7OLeg+b{GOP)zs(`rUQBnqoL?6|Uga)5lrS_Jp{BUqv*JK=bJKHt)2lFD(3~%PMW}e8CEN)KUl`77BZ<$Xik4RPBq_H=0Q8a()Fj;TP zS@NCQW=5}AI+5vJp(^cC#Ix7cNqg2gqC}@wuCVC43NwypIBv?jP6F(PS&^w<-6$n_ zPc*3$Cv@V4)a#>L?G}F4*dOS`3qD@fS4)#+J5fsedPQrq)knmvFq&8%l)1VPk2%2| z{`iWn(AtIc76x2_Nq{RbXjo`i@NdY#KfgkNtiT|D<^}f%o*au!R2iF$g7q0>?S+HO z&Y=V@zeX@ApNpxeE*&^UQ9VB71mE1hZ5w@fc@O=29X7EiHPEs>N3(!tn4ee|xHpIP zb7sOzM(Vvm#N>IAc2+^T4Q9@_><_YS;GXM!j^m+3>WQrTO~w|Vo&+BR@0F7ae9~T z?C|clT1oFl~10IX|-eEi({I> zsx?buy5Nj><=??QN=Qiic-@Mg_Oq+yB$nSJ1>E3w^j}O@dKZmkiuV*^Sc7hwoc3k@~))$k{%gdX3!TG@xB**!t(Aw%I9o_?KW1N*PH>h%IPqVa^ z7SyARR57I#>RP!QubX>kWL9@aqXIU`tY&Vyi1Xz0EuF9>WhE}po>&ZR?;W_@CK?bkLH z@GDS{@FSssoGgxKVSHDPE@h zxusC*ofkFj$*4OpHZq1QbhNv<&SP`7N`>G6Zz4AkLnSWphDC%qP?APWInZHuQ`9{(Qp~8@x&{Iom6L5%>Cp9sn4YFqGA(aZj&auUyOeK95b%gZz`3J6ikDJx= z?v(#Q*IU4~)iiy>K=I=4?(VL|-Q6h^DZ$+-R@~hsIHkp%;_mM5P~4?&Xs_#j?&tl! z_m^ceJO7bGa*}g)GCOg7e3iehe!+~spORUgEHc;0l!AV=B`XcW zifE#+{%ocD9*ew?6y8M_7MoSNi@T-9d3+IyEi8qf z)NBtG>mHjKhu^2{h%u9st)p77iZhwO$PFm0R8j4{jL!_=wLT9Ip~xvQ18Uo%C_M6` zGY!)#B%zpQMN#4Gj7E`eV?2&zNgD)PwAhJOY~ET2D)91l9HTo%5Ax}HYexr$o-bz9 zj!f*>;DhS0$)W}1$EAprn|jCsCbCuUU`w?u=t9pl%zoiDn-ZwWPKo{qS7h@w9368E zdHF#p%&aU0$5b92pblhJ|17%dg>+D&2C6)zY|V%3y4xWN4zj2H)E<#}eC zO(DfdBS`bd=c@*5t@s#p$aN#0kn14Sj|5m+QAmo3q&S=*c|K1KhJk6#3N9-Y3*_fJ2zj43Fzoo+m5+DO}|k?D=Yvvf_% zer5E3cN%?UDO^?Y3Pjw4Hz7z|!(E2M!%gMA%3W4hX4TyVF!QFnouVvYG?X~qcm3F9 z_Q02l&+@Ujzg5L5n!(62rNLCuNJJu*HuHEkQruiXx17uJ$>}GCmR|YhU=X-JK2JxM zMp0aUMED(uSyFO(YlvO?(C!RHBzr0FR0-U{nlI_OE-Ng;>Z&K=BvTqN%dh~nx?bJS z`GusRmCodZ-6E+ZniHfBox^{m8UBh`CjsF#h6d|=Jma(S%8@YPfi8AozS^5V^kDV` zAk@0I=r7Hit>;1WSq)j^3T_b!g;zVctT(c5ZehHN#&drkak4mj#dqf-^yXqU6_g_srC^3?C(?c`BjbU}gXPhgxi_?`Yb^kUGQ`LB$qeIRv|Z zD>3pp3Wqid2e#Gn>*V%^P7Cdz+Vc2Tm>o?q!>OXTK3+c@U$N3AF_9mN@XqzT)~xMw zGx%&T1Y2YQ%@Aw@wgtYrQEJ!tIi}>}<^Enea&>+5gg9zGpr;ddN1%N?M>ujmPoe&j z4}7)<;#>*CA_dz*Sl$SVXR5hhq@>~J7+=(oFcH;ztT>|w?@+AgInW1ic=}ar!*^Iz zqTmC^M@a}fJTlk@;!h3^*r*N=>&E_SWlV9mh<}FIC@xNyHHi5p*vfN4Ec6_|!Pb<# zJ@#^*2G3AtmYH)KhrWcWd-TStV%D#*jH+syh$5El+;)P#`;%IuPut@5t<;jn9Uebe zGcrP1&A<}gK6bNPddzZg##A=mbQY+3J;$I!<=oT%24jv5ozh&2&vK0+&1x_PbA_UK zW?m(d0nO0PeuKUL4R#yIEEJnq_>1p}`PV#>44?8O-c;60%6TiDrjHe^3SabEfwAYA z&2KPZNHNhG)acbB@H$vVF^Af(gzAi4&^Rr{57ok)-QvESRnrsJ6K zVz>G?ScO}E^6=}Ab)4QkqGGeWI2e5>s83|)O!C^Dkg#J6AK7u&7_nIMP5V!3iD>bq zu(hx)mQ1&p$Z5DD0{gtEMpSX+666~I`2ty0Q{;n7FJ$kmq$eQ+mYD(g?m4G6t2Gl{&de;!xdOLop(9MwKdb%$*OM2nZd@gEBPk`_E>E@v89%}C6hk{X6;o9tj zEA^OD>Slpi@+X;JF`Uw`Q(pf7m6N*!#my)aZ4I{mv2iB1hLb=%l|N0VcU!tI?Mr#@ zDYn4pC1z~={B36=HyrC)ZM!GePSgS@F0LpXmaW7baYG(0KXLnSuU|I}UQmv|VJs9) z22 zmyE^jB)M)whoboW1#XN(2^UnH^CP&dSyRCR&lhvx0u;jICNmchYpSAefL_+6_aQ7r z454)TJ32g{b2I8t=U4QwcI;b{ylc7_ zbM9YhqLyOs@VK{$;b>OQ1AeS2fBg-{6C2OgKtG>Cj6U+f$>}wlf|ta-I|b-ybwAxd zR=-e7(BpS??V2c>QLgkI?yBuz&O%~vRLK$POGvlP*WhOtdgVgMuFp(wks8nah$jqo zmcqeHH^2P+L|Z>|)NP5Inm08qn~3Pk*w*?KO<9Opt{fh;n4P9~wB$a;E*qCB-^C?{ zOlDr&yjCziGR)02mFBFEQ$Dp)IFhVYZgQ)Ll4t2Ro{IZQTqV*wOH7@7sZON&N<7XQ zc$B`QFKG1;lOs~0s#`vsoKj^Hw#aQp#L&u4)ZfkHK7+lB9MeL?0w(=^f6W8!G)12m zwp59!fUPtbaPNfBTu*>hZzHa1EnPYclTc-Oe1O?Z&goj=s6AuqDskl1o6;Ne!~PcE zKt}YgH{-rrfiy8>8S7oH=~4%56{*>dAagONcv)EzYw^8e$C*0E5wVCvjlCz7W*oET zXVJ;*?q<3ft8}?^CM3n~6B6dwaAfPOt~L(g-MrC#~m^D z)ZFwe7>3XW{Pbq-`GYzZ6CWJ-hdw%ORavjZ=nu{9amrm+mjbz26gQ$!RQ(0RG95gX z&}i~%_HyOBV`bg;^JpARx{l7~({?c*O4S#DbzLpL@V9`fo<(Qy7bp15h{&i-iccvu zcAE(D+#Cxo1@@iz@~33N z1PFy$Gg<@Y(X_c_jS}w|?#0+n<%%T={rLz#wT?3Kk#qif?AbY<{*{u$Er^t+nF?$w zoE)}X#Au$WQz3Ts(36r#EtVbi-0KX>Bvka8X!as~hTXV9y6avLDw@xa^*P@~%bhQr z{1rUZx?Y%oN9~5z_s*Ixh%AfiEO$}p;4`B7+RS7Ki~Lpg_W-ne%*4lixRW8u@1tCL zEUV*&_RG?iIuNUn+tY932E?U5KbiPN#&=0CnPJ- zOfDjq*|lh~(f9#5Du3WfvwCyLvD7omYUJp+T21SoteH2UMd}qZyp({BC|eNZp^2*A zyQ^g@?sq9n<1*V`-GDfFn7AUttF)6)nAJzS5F(ow%SX53lY4bKT&yr{g2`aK>>Wm0 z=$56zEzBy=#v5$3fblHFPdW%crMQiT^G(q%{*2`2=q!kl36UZr#(Z>!vQRSN7=jLG z{Ctpl%{PuykX4|Pdq(L8C7qfo)d@q)uY>r$aDud2ul^~DV^#LG(vdsBEqioc;vtU> znG@!~u-W3YppkZVZ$b?(=K!JZ(`G-`;gn9(tvt}yQ;uq7*kO#)p{!26;fz>1sYm^= zQc?S67gkpvTc$(F*VRznU^n0_tip(FOnz0Wi|Qiic##bP#v^nuCtWjPh`M3%M4^Mh zc52{+l{x%~!Bd>RR=k~4bnx~mFH%Lp>*C6>>5+NQ<)3{Skaph#0he{qi^Nm5j$mJekps++Ck9>Xh>GpghsAV}xJ!`}l} zguG37Zb8{s7k$qOCtBG9nvBYTLhNTKWwU~Opc@E_3ss+j`AOi)pOrX%oS=dAz0^%@8*gq(nI>v(vx=(U&im4`SqEM)P39OzvhsONq zbYX1ooZq$ePiiW(Feo(@bV1Tyg>${dhE!{*5;BF0hE_HA5s`Y=Btw+Yk!bIDS@JUF z%bLKpB#71D$GXZ5BLcy?YW1xcHnMU$UAR}>N9f~)ybs@7_ePmCvkQlRM4ZidHkZT) zrHbiPm^4#d=TUFsN(5gw5O4%Fzo4lR2<=u11tvwKH{)H$T}DRDn0a~#-8Y3!Y+Pv= z(XVr|EsKq7kOT=ej1^5^u!tw`1=P(xLz<0J#+BB>zI<}I^Px=WG37aq%}=P1de>|> zt(s(i`x71U`~6aeQZ-m+yhlML)g~BwGb4nz#!iln1_kQQC6z@+qkGtpRyDjEpGf(b z^Yj8qAfK+%>SyY!h*jO>0-$88e1Rg>4&&`qu5(0Q6WnO85`1j=L?l=xx#KLg@<{gq zDaG6r2K`x3*$3SnG6Ry5SSafX@}^>K#-{90Y5z-#k|g+uWT=mgM#;KHl?+8x++&+B zs~4Psl#C3(R(ka)jOfF(gpEEIN>TL}gvtlZ(NPBbJekVkD%ix;wvo^7@|_BL3wbKN znu-o{^_1Eo=+f5a{1RoiBJxxENt%<6UgCD~35?BImKxp(&ezKT8*21fDEt%}t^F4N zlP^>jDJB=F@!4EbzriRw_E4roq=8DB?kn>si-2UK4|+1=Lzt{gJ%!6r zq>L~$39=c{z5^>oc<+4NOMfh-CM2&SUoiXzEvwEtt$*McVTl@Dg;;%>qLcjL5dCX~ zan0Azing~rif{NnwUrMEKhn&z1tmVLV4Gu8sLV$*fN zR#S#cM$UL))OC&9+hn#r4@eaP@d+cX(Bt{r0<4d0lKp{G!ZJ93kxphrv?>lB>-G8I ziR*_Tr~tQSd{jI+=~uZ zDU`MI=V{ymfx-Ryd}&JO%ZPkO7#Zh-Rayt1MD-%Ek~3tH z;R1@%RWYgNwz-+|MO$gSn}Vm$q4}igaki&oMgtMLcwq)1k>w4iQlp|Nm!~LWTFNRA!MLL$E zbS)>j984JWDUWurK1Akf0r)5KpJf8@1wX5*Spf!_E5bC7OZHYWK|fj;m;7u3Lbd&` zkSHxRNo6=;GHK^CWl=I^6D=X>^c+}lBaVoNNSd$0b!Wp=qh$6x5OIb;kwsgY{=h1E zv)Z`X9#im09VIhkcuxc~{w4ARH_>oL3g;{SowWghqS--p=;PLrLn|p^$#y{dC^N$) zJ^@e)sRfrHIU&{iAz7AX?qjfH3#1trZxU>UBj6w!QB*~uFxnI&2}P3Rt9A*fnxF!d}FiZx?2gbDbLMt{xs+3imV~XR;1QvZK!d8*QA{B;hGDkyr9FBT2KjKo;p6_j9|9Uu7d( z(i6w?R^gWWBQ;k7R<6s%bPP5BXVrdHahc{dMn$lK`m~qCs9AD$ty;dgs|rP1xzNOn zg!#}RYBz~a>j&CzBZ3#aPdPZAwyrL?GQfNS*Tgmn_3ef}d(BFR53Jig)6k_OTc8qG zVS^egOZ}h57+L~+Mv_%3jt_#{ABR?S$`YNkg;k-Qz+o}o#bhPBTm$==>!=mwDcZNZ z@^$EBA!@Qz1ctBRkXk&zG8NPi1q#G9XRmQ=6-8$%=^PZ9re6+OIais1EvG=|{XK4K zsHd%2c+~zgJDN19C<0>Vmjig25}v@GZzeao%ci@8u}uwhsA;u6GZ)tvl7GAo+!ZGa z{tyF|MUEe3riG|LFZ5ZXGHXTnG(EOw#d*jF$;UQItM;`NpA z2|s?RW6o*w;?`jkk3Bnv3ePd&>-N;KY@H>k3|}OxKun#4Vt1kI-86e$iGznww8_c# za4}!o3h3ax$Z14Xf4=+R*nWPm2}eqzo&L^+sjJ1M>%D0Jon)*1P%s#Zb=el8RY>-N zwo_bip;pzpVF?!y15Oze8k8viYSL?GqER1KZ0kP22$WTrRb_$iMm9M;Q_sTfCuVOd z7lJ)2IpF;b*4B2i@{>a&nHs3=?R9e}t4C6Z(1vSORsB7<;>$iHEIizWih)qdE}RU* zggP3QR7{Mil~N>+?<7Nmt)`2PhTmzB+=?zd+|bbY5NKnG<7Ieh2dEnR_LH)+ROk0r zG4doc^j{!neK`ldWtE>q=&TJ5Ef2NO?3DeAG=_q)U6h8!%*BXeE#l})?P3_HKe+={ z6Ssor3AyOf!lC#Ao>ym)>_fWy4K8j!gb#Ov_B2oZmRQXi{W2^KusoLd$WH$|)vx z_ILf{(HfGzFz`~Am^F~cXaww(wgm-kv$#7x3@)Ty$b@UI`&NE7#U zznIRQTeT+lja?5^#otkzUK3sWwfc0&XkRI@#Cu4VsW;P4D_+EvX$X&e6EqAWEt|T5 zoWm+K%=r8zBv(n(Qq5#4AKQZ3s;U_!>t4eej?lTdok^`b7F%@oMOm!_Ty}1=J~nCH zO7-+M;386A&8n+zGSlmD8LD{?=;?fS3YYA5oCqY*To(5+tmS1xQWUr_F@W}j`}B8ZcL*|3Qt2}YtO88HDXqQeyO4k zw>Gj?Sz>krKdYymWL)@dN3v6!qm;wveH6=%XN*bB!4i3PnJO77{Sv$FN@WVtN+*!} zJK}^7kuD0pfnK7L4@s#s=oy3z6-9Zvqcj|I7+E zo^chCEzK+T-dWv?R=diR&!ktYmvspAh_p)~JMkUmbIMLtHBjb80h$G<(#O7{M|zcd$y<|dQB=js z?h^7V40G-Natx4-qIC@58>QhlkzH3+M*&{eQs|vJEh3hjg|}gw#f3E|M@OF5+LgO` zDTRx)CeP$4X)WX0W-IiC&!ixOB9Zmn(`@-{(Rlt;Sv;bQv@*vr2pzftY%iAQ!#4%p z%yVx;RHq@JRW_^twsn5IHG*M6bR*5rc|qrH%fY$=b@)$x-wWx|)KOS*@Iz}J#ktUy zc-R_tcrapFd zsHjM;A|V>9LfFEU0u@cb;fJx+sO9+pU`5HX_LHHzFd-um^+Yje;*8b#usRUM=(0~+ zU5AzQN})$BwJYy9tx5?l4{%=MA%w-isZtxp_+_V5Z=!WDpbz|^B*%uw`EDnHE_o`CEvv6ONXE4301F#|8l{1 zUTGRkTUEq4y^d89DZ)eOb8r|`_q4j%6bjXtUd%x`%aIHE{hoydAj5$vAm@0n%lAEC z9{e4f1pi zFunC##oCfvEh{^vJieh)LBV2w@WJ#XCXrn3E;INDm7C1RF2X|`OWaq&tSkJAC3}JQ zImj_AYnWNQ%>qek`S91D2t4%w+_aJtoT({s3Op3%0L_HubwRRU7HT3cgwWVbj{t`{ zj1s_h*OUXQ`!SKsFK1%8RKf`t0gNI*`Q*#B1Kes6>X&Nb!wFx)%&yH0Y5!UR(Sd&Cdp3OQEE0&pfR$5Hm_RHFAQpfT9y%mKrd{Rf-t<2N%GwRgOGGk=dcrj!P zky^hZ!b%0YpMP25ltY8h0`*mFl;yb-hw6_Gg4r(Nu|VG`2LfF?L~)p+{nD32w|&%S z5=tyhGjVidOoYBRkfbD(Wd4W*I;*@`psBgYu=JDY)gCvgI_u{}y7__uY@RZSl0m7C z)FM@FWeeSFQocS)DwhVv*48r)0XrTiI?bIU)`0vvA`cBb*t!6hNUij=5x;T2NG4+bOL&727VTw+_n!dW==SS;TH0L}Rx9 zz-2;eH`gdZN*yd48^{L}2`?4TY8~5nuljSB&!<}-PKT;OWV}*JXU|ohY94*SMWC>^ zMq#$vkx+?Jf1b39oG$zjHF@%gb%?xB5}CT5g}h_Pf&3e*v!t|2WQhM^44mTEQqH|Z zh{7%lZZoXqv1D&^=cAz7A+#V0WzdV~q`}Uzr2pYNt#S!VX;$yBq|e4aA&flMs;F#2 z0HkuX)0ctcNFpN}ck{=|&6H!QAT1kHkFh(7QK`t9FKYAPyXRNJwaPo!PC0YBb*o4P zP{^6sAH4GQee$7g;|hiX!ak`VhmRzN|MYWBd4?qRcn~qwDXd>|q9n^aZ=Ui>yV|a2 z5hR0O{pe%nQ|=z!W~hwFGL@+V(nv+Nt;rgTSuDoPNwiaC8?>?FQSa%imOHu<7(b&}UIZS4egW=_5 z==4k5Q06QCI*;Hy*@pB*AMGiTBx3baazQGE`cJh=IQ7qN!e&sT23#HdkhdaMA@NJl zW`)Wg6e)$uNjZeA2`67F$8ugkI~957rchwj#^6>|IqQPF2aca6Cb>-SQGG|~yJN@^ zn7M^*c9{R9Q68UKt*B8im7eY)wAdt>b)BGHF72xS5b@B-rk5Xl;=mD;dsd)l4Nc2V zcWjsrySE?(-c$p>Yz|`saeMjmDn;!ieC$_X#KICFyufLqrgEgiTQ?{uN^EFGxkBS* zG(}~;Exb>@dg+=#7-xfeU8)eGAYhei_K@W3fPVEOmaoe7`(^^AF}lhjzYmC_&2 zn38Ph#6cf%xjPWvZgk{L7|u#Q!cqSQL+Df7m(SV6$z4hNR{u4Un{})j(p;{7y>R1R z>OD6@!1sjnXkr)7*!g`-m%|i4ci6#|8JdTk@^y@qMDr?9Fu#?zMdkD;plW5H^+K?3 z8#%tM76JoRIsJSFGTX?{W;APS51i z$#2oD>&nfb-WDDxrbuO>K308{9iKVIXnhF_zrlK$Y4<(DdsG_rncw>c+pzKIB+Lc35RSwlWn-B%lO1Flc@#`};QrP`LI%Q9P@$UVJ!`%!{o31BJC4YdL zQ09@hXufClOwh-?Y_(-()7T*1yPkeq3d#?u?6Cz`)XeGvF&a+johcxLk2h&?WWxFkI{UhyvhXyEh^(P6U3W9gb1eJCu=I>*Xf z#rox$jaNXbKF~$gtmJc01ut`(HaX&s18Ul)t`_<^yPRI%Wr#lH6sErx^_$NO)Zi=~g$9+>=3Uc0@_G;Ug?h^|+M|7Edi`1k(FV*LeBe_jMF|$nxBt zKr>mxAGNs0>r@^$#yEv(=INSH(WTK0Seu$NW#&jW3^OOc>XXn6fI#G6KnOymWxMsL z+Bam?6LtT_LhVbBc#T+v@iFXFtv)*5SIJKwqwSQF!|JH)o~Q0UEW0+mw;>-R z{8Qq-Jj{dW7se~AV$hXfrZ8y)DWhgThrJ+7p^A@H);+XTPGpONQh_IduIOiZyV1+Q z?kc1mO%0cc`|{@@vFjBGxY)O9x!VZ{VvGWM$c63wg+s5kUp}0bANWWN2Y&*K?Z~OF9%AwbOcKX0=&fw z7$Ij@0iVK*HuTTw3|1P}zn^y>ixbukEli%X82O%i#n=guxWy*9oujm7whR<_My|0y zK=5%2Wj8&RcKW`8nWaKI#t>%F2P+ViKh1Zj_^o=+mriH1`#uL|e8?*}bJBUz`97v_ zc&TG1&f%E?q+3fq5|+jN9>xvayDLOH!(sTCp-gy^1-+mq$p|h$p*KYE5*R$0ZB?WIahOLx59_m$UP%b+f$J(Pa48QEH}?_}dsY~^j3 zP#KuqQXHHht_!fQOiYic@le&#HgRbc9FTT&I@g97$8b0G(;76xD6`+tA$paO7#!STQr6rU^a(Ee7x9%~1Pz(}@CThNEBRob1>gc3y5gii=ylAsdOo({@+hv3K~jY3KaV}r4t47C z?yf$|2f7sAoz1C;PN?&j$cgP-N3W2NgOX=W0xKyDNkTg&rzh|8!Qt>J>0$!TmbGw= zT+=>4%v-!K=<|AkTHKU{YL79MGM9bQ1VvA zZ%hQcxw8Ke=CftGh*(^OXT-X4Qyt0GX>A6`;zwyhJP>>yQAyfB`YH&j-SClI;?PZT zg|9_?1$JAQQTMAp5{rDp1$#LawWX|%ZKm8oI5n9vZVl6+e}+{_nfHV~2Sub2HCB%* z-w%eqPLWg(8sCXS1{+G!nh;ZU*+hMYK#}gKlKLv1qDc2L$NA*ey4}i^?Whk}PwPm9 zc11~0rD%m)?^A|>C5>ICvEm%MrtTKHvXB(ZHu!nBa@^qzOudUgY+l0>&E_u39>%E9 zZ898()uQFw#W8~Wv0*Z2UXSvU6=XuYzfTLZ z`iYpMlT{h6AKoOmg_Suj86a+qbY-viz%I(HPH-8k=;~1LIV~^jEn$#F+V_CXTrOl_moECps; zFy+P5;5XQyTOnli2UK2;>IuMHaYMA>yMpx$HlH5!rPM`~om&Xai_B2JW;-DvZwiZh zN~HL`AP8F+r{3Yk)Kd2x#l6LiDRQK&&10B&?T2mXil~vHkHJ14x7vSP7-`=FaW3uY23CbTivn1N z?#l&9gW{4oTr+Ue=}FR3!Kq!(?zcJ#CW;LN2DwKh{-af%eZql_Cw(?$pAs1C=U}v= zQAhDJLK&7_?jzsD&%9?DiqR0;1LXr9(>?zN;si1EiN##>0YtrLMh z?J|a{>Y!w#4|T*7esGmLsD%Zo1k0L&5CZm&QN6j1suHj$ZwB-JY7ekqLpVPhOQ; zsxh=o4z}%Be0#~b;*yrfF(f82HrI9}mt2SZqaXA0eX`yFY6lkW7bS+Kjdiamg++F9 z%ohpD5acv4PqF#$Uqq=~@jcgH;Bp)&7)Qj9j$KUp0{M2eUx@-ZfX9m38OX%O92H9$v@ z{t@#9UW@Dsc%t0;zF&-nIh}{YB)KPe-LoPH7Z$dNOG$94QTu%mr7;c`O%x(R7}?Tx z*lPY(AMC_CNbS=uP#rXD;faA_-to%?)vxCICT8lQG_2Wl!=EgWOEwBhhHc37t#K7Y z(sI+dNLk)B@^n|&_k2;Kfe23K;w#&$e#Zj$11rjk&g36cexW^|oxpm-IOQy)TWnP1bfbY_Z1%i^@g zSb>FO^=oGjQO*gC=%$eIE*GtCWWH97X&8nW3OaW~l271P38BNwL}7>DBs|$TXVk#EI|V5~Q_>6ygTm>VGY*FV%a(E8JvuT?_4Jm$Oe2(7~b{s8YO z7j-9+i*_PU0VQy5noqkq!P@zgL*FpZ@x&5-gsQ>7tv6Fys1+6WJ~|gKJCY&_K$8)q zS}z1LDRmCymFMot%F6DZqwPu(TqFHzA*4Yfkp>TJS(NkkBUWA3WVnYIVW1T2-y<$d zYuesK@vIZ(nrmHy(FBVo^~RgAc=h~7zIM^gUE;Pf&pRFvDy#q~8{D6dbQc+_v=~p|7gq zIWHLLgGXY~WNgsIU9XBOk#@<<^NU)#x=^9q6!WoO`vP!u{^H#2d~&XE#xC_TNfN3c zCrxOUWx#LC=};}eRItCB6xQjOE-3ykda>5EEak3@K zj;xR32r{c@db-O?Fv_^qg^DTx{kCQs&3qfx1zxo!M=1TW)|kU1J<`K#x;?V+q>S0o zkdRS+Wa#kCY+#CS^BA`24XrlzT8oir4kw+h4EyAnDA{DyfG;L-CoD0UkM%`k8>NI~ ztPeUU-57fI?E&+;4Vug&yaN>m`BTmvC0>T&zZw|D{~G=`L|gGCMA`p@N9{k_x(xi-U z%tdZ}^1@FbVi{2OuSbxWNaG)mfB4mZ`ug8s5dYDac=r#SQN`Q$7hZPo_*Y-`FK6*f zgBl=cS?0~nGNA6?gX8&&id+5R+Y$X8cK>te2!DnxTmQPhulyrs^4GQGA2crGUvwFu z`B(mrYnwlG`WyNw$n8zB>HV8z1MHh|iu0go&PRP>fyZ?v-v4xk=62jC9YqPp~g|Asc+Uytem zZr@PbL9#ba(eztie*wsMOYA9R`VaoV>2=?|Up);Ea9#a@}z zFSER4Wz{cVir>n?Q35!Y0QHeGN*@6Aud$Y*;9;P;IA9BG)<>{b^-cisw% z!|@9Bi)dI{l!z3uUp>#s#QN*kyeyZ!KImVWB~{kGIaifk00UbFjFF-Dybb?2MC{aD zwyCZYtzS-;{`chi3%&KLU(c68x%va}$;+SK{%a6x;vda_g>10i4B5y~DE#4^{>%SI zZ0`-V#ihvL`XlzI{|5p|CciNOn-uY`e~6(!J&5zS9sMDeDdI)-{&4=jDgUC+e~4Pp z8Ho4?U1$7{V*Rom-ygJY2XqGh{UF%&{i_H<(f-h_g&;I8F*)^k4#?Jf1xrw zo&RMPP=CwtkJEo-Vv+IxV;0be{O=+C#{&L1G{|y>LjAJ6_J5fFMW|9V)io9U)WG@Q zX8*^Iw9(H03;O@#=ez}XQU9O8-8fKiH{dNtQ~CU26XkDk_pR&`%Co>s67?$<=m&;< zz2YQun7b^$*56=>D=@l0Nq6szeySywju}|{80c;_*Y&zs61d>KdtYgc4fKnus1;I| zw_~2mNZs`-8wPD=k9#UPAmo?ACbBnMl0r9e)B$CjYfsN}W2GgSn}Gp@Tc@O}mdbiL z8bTJ+q!Rp$J1z^=zkMEgnp`n`@frDD=*iSH`$|GQiDwd)8ykUXjX#lAsmOQiUY;-& zB|WvQeEJtCL)!9L{QXxs#F4`baSoe3z2-5CES;}>oYwKzM=F&`ddAa~A+y736~R-kz# zhC~DHYpK$)VJb}m_m#al){)_ZaNLAkOWDb{2q>T{MTN@)t`xGhI!%8(XdgYQ{vfKW zeZWjJ;!4~-mD4fRlgHD|q7Em|KvV?^AUvb#i9E@$L?>=k)bSwVc_HG`EyE^RwV?UWvG3AUkL2ps>eOEh;HqAG>I7 z7&#vI##A|2QrPZX0n!gv_G|$iQ>4qYkP!9&ul4HZrpDr|(i9Su|UdwsDEf{6P z>m%Qs>1-b?-4vSm(hO6XjW~}5i4gh-T*nq+&^CIN97clMJspV;EC_!wo!vHaU58^P`q`! zTU_i1;qc4bkp^AgPB!Mfj6l(|gRBWyh7r4+><>Nsp5utIB~{k13cqweS-5D zz)A?XTK0or%r<*ez;kRsL=xDKo+U$&;&yeJ__`J<=kF5nxJ1_#y3WqCDgFiEbP zZcvoB`q98*(WgXoY~_5MesZSEIBr*tD%t6}>dfc!)4J~K-CV+DN-veEiI=8%k9|4b zATxKE9e)pNhb(!Jp-xklIkQzg2OT(f#xhj3uI5#d6%K^9<|bC39Y&+XkRD!c#sWo_ zLtR+&-uK?dQ}%b52na>@#sJ>dX?D!oz>1lZV_LYt#MnL5ox6iIX5F8N&GR?ux?}@# zspTQm(i!rK-m7IeaySvDZcD)Ouk7d^jgE8Gs8;n?5qqN;Xd)T1BOBQ`z+h7wdqnq{ z*ZDg4tFz5?Hdp;sqmLb_=h5}&L>Vh5{oqS_C$`hJTRZolg_d^=5fm8%0vFc$w%T%G zi<6@#p!!iPGYyrr#rpMjhthMJr!w;mW2$b?3{rE6$i{^JZAMoewYE7z@1~!!LYdVS z`>NtRr{zeyeL-twFNJ?Knr!CtZbz{*WQ8KxS@@A}X?opS(70m9dbOo`RW0mmxl*8y zhAWZ4)nvernD*Ax;lNcx5~$2|qD$r<1&nQ{5X{)Sr!uXP8&WRJ)gxU&8Y0?HghGoc zDEGOf^(A&vMy^rHEzI!k1>Yol^o~>4JNWA5icQUI=mQZ^xycXN%$jFSJIG0 z5yhiPsfN?q%b>nvtB-0{(NRN*pXVC3NTM~%6=)Y*3MQ#Odi*9_e$@C{Rkr=uUdE3{ z@EuEcaB=)aeB4%TkQDQU{)z7OC`7OppouZ%L(B5hfio{CB4IpOCzUUepNv@+r|vO( zIa_A|Irh#fq_)6@p?((iGSxEcbDkGjH!I3JEVX(2o^OYLu)Jy2JHtTkbQAdKy^oolEk1va=cJ609v|;|LT8`H zn?jR+n~`;IbIY!J3y#!4re|N8(H2FpHhyoW3VUrSFFVYN>a99KB$o2@guw*i5=de7 z*_nnzvRUBey&9Pk9ALR~IQc~CD%{N8Jq|^F3xl7zXm_KXRdR-jj3i`-z97C@5`L5rQ%|Fx5(r)~SLZZ6L3yK& z{sRR5bAY;oujXmru|FOFKZwP3tdi>E>&!ag*Oh)7yfqH%Oe0TH;?zys>NC=PMd}DF z!s3Ued&ZUqB@3z_$)kRG^=l~kLbYDJDv2`p4EW`(+{1#tywPQ}E;J;A(Sm;ny6W(k zg9@1wM+9^}(i1)dD`RpDXUBBzAI|Zq_H&-@3q=eH7NG^Rt|kwI@qXsOoz`OR&HWSho5q0VHPo9W#K; zbFtG;8NYGIeT;m zgn>qe;n4G&h2%ko!DKR-%kK}EJZ}uE^ck2C((MZztcW<&R#z8{;|#D%(4OD79)Ji< z+SOikYJ2~#3r+>yc==Z(0Zg#CBmb1#jeSW!^4EZ3utP=B1Fd&cjYNr9$RGYsS7#N} z)*E*F;0_^Bq*x#jLUD?_7bmz=yhx!~aY=yU?(Xi|QrxY0f#Ob!7bwM{AOD#%=bLkG z_RPL}XJ731k@Z_E3S53pT;yni%V9jc^8rMVwmP8{#=KkpkdE`M1qV-*D3ijO%4^hY z*KdA{*(Gp9s>I_JNXnyf#O*%i|=tgF9BcR!d z9P6~{*va^^Jg%=d!%JsugL;1Z7qxp){xIi&oN3*uVIyR7elX*!j|WzqA@Q!x0$R*^ ziogA30X-Jl`PH;{iVqP)@>XfhxPrCpbw3_zUIsi?XrL z>d=(z{U2+QljOf&{R3ziU>qn|yBA-y@rHJ#47wN8-)U#w@$w53=rg_T^Iv$Lrd8U2 zy5e4b0$^RNC@EH(( z{(s~#{~0y`pXD*=+YQ%^0Wchhvk%*y&Pp}spsX*Q5780Yc2KNO7el>e-O`(3IGuO3 z(qpT3V9S9gA^d(-5ayxHY0(tygN8O7t2zSXWV4by3HxjKEbE3G**v9#p|LSwN{ zVl+ZmS_4J0>VYS_=Zjr~G7L2OKA<}-?(wj_d_8i~D{$4t3eIm*JhThAvb=Jx>1za* zY~}!Scv@qub{pZuqrKl7Ouf+~&G(k@FmFvD{ZkjE*OzJxpvwy{5R7OiwqNB^7v>;GbS{_CV(Bials=W)FzY;5 zQ&TU_sU(?e)F+w(hPPhn2iN-R+^Y)1c^D;Tr6)cUW_IGn$a<|bTy&Ic1Op`9&!@2% z$EBcr5f$)S243uMeaQ|Xg%%3w&2z_!tPGOdXH}&rWcV!~0#Yz->J^+nP+2r(DuDYS zMmzSI4C$Y|47Dk;*0V9NS$iFzCGFoK%i9W4Ia&VzWZ4E|iY{Ww*}R&3xLYQLz3V={GAro5dbpp7OQX z9<8UB~yfabiyv>R4-r<4HTi*lZsv(N+m-l@~-4N2a#4gK6l%Rprx zGqMh}Kk_i2TkCv(lDRogPUD%#Nj2K~)7cgS25Il$aCrceNhERt<(hWbAC@uv{24?O z(Q80Ms!-FxLpe{1;PybJY_v7KVr}F*1Xitsgm6)dXpPB%+S>tYc2jSL`|9hT52g9S z17d|4G@3U7hhi)R>YD0?A$nGRIf;`5VJ4~>Ec$1WtD$jaSl=wQM-Rn&eRyA|c^~xb zE%-$u*#V(B!zm35#i)XbS6tV{l;5O+8|>v+M{*>cH4DvrtT)74o*}6HoN~-HiH08| zWhlC`34%<5guhoV4*GIl;z6uDMbmMl+H0qhV%;^SWY)INjc&2_Q4bdhKT23_F8wgg zIUrN7cm3!y%i^}zhhooiqKv+iddG(*s?=XLcT3ig$}8gHHrmDFdTw|soJ}&a_>En4 zipZ07Mi32UXIvvHPP4x~DEF8QYh`MZRMJ?EzMQ12=l*&<1lgWFo+~XN)thqR!dI=& zwa@$JihF0G!D+p0>v#m4dnZX|{)gFoF_T3OQLw$7kXIU0#a0#6uK8sesS34bq49#K z)a2ro8uj7yd2CsK3x2MMTUV$a$?ifO*UYqS+_A%U7ktG*O}I5q| zVE+JR#4~5(IWm^{vTcVx8a^CVZ+qlgY1fubRQmo`gT|1SZ`_R!Z;q#JhGH6C3&CA(+V>qd#|UO zowP>VyzVB$BewJDzY?NN4I}gW%ChJbG(=11-v!SeA%y<`^9;7nkSfHOh&e#aZ6`cN zZ0cmcJ0oj2khPg){QT#O$03n-C89jf1{?}^9Dw~x|9z`GisN|MCHm?U?(vyJnVX<` zIDt7}~`p8i_hPY78#Uxp?qVo5VoF8fu9}^svqn;XLs(Rr<@VDL*7FX$6bN zHtcnLf|f%TBGy|YvtCebTv;SiJfsk$Q=i@JP=;KZU%nkcSa)M!)!&?Y1X^~-_utp; zu&_ra70#VKTd(b@qisCtJg6J0bdzt~;(cPVK6{b$OlLowpEazbm+2*L1OeH~>bv~B z*D+2Xyz%MUoVscTb$%!y4{?<8Lp}aR5F_5~y#;A6x^ucDD9$EDE>lSz%R* znanlBnV`})Kf&gFO-DxJElo$NTyzZ&l8Pl7TFmFMxkNSZ?-r(>AG5&p^X1W(tLRtd z@4npEZFJeTWwe3jrV7}aC(aCA@b|TggMhXXS^8f+=I+5Ug9Wd;CVod!;t1c$Q~mOj#JX2Qc4Jxuw6=s+44JL#6qd61@~#0WV6(PL~6EZLTvgq$fgwEA~FzNiyEV zh^cM7->jrjjA6c>~GB#@Q-Pv{mj+t%BH%2dcc_ zrC`&?)GO^f7?=*|HE&>{?_;w+Tu$uqiOg=bN?t}8U+i%Qal0gwZCfZu_Xk;1kZ&WP zMmg-%NF>GuOa?N&h51Lu6;r@I0<0w7@(cTZ##*wLQUs(=M1MOsQo zS~@QnNxE17dgV^}qC!#1Y~gyBi3wvw?>O@@Nq391%JW=?DPXi1a}G3ZUw|vAG7U!` zn8t?}cSOs5@J;DF)xG|zB~JBfoaPmbEYF-yTpGnnaZKX|ZCd1z&icvB9yho|3jPA? zCwwIQ!a>Pk^2%2y=Fnd$=*E=%|ydVUyFWO~vKXroub^8DL!2G6ud$&-sJ zv=wZ^Lv3kDMrao4##jphE$kdeU5XJ^yqUl4NtDH|wRT0*p^);No2hZYzKR;zP_3 zc%P`Ef^D`bm;eFRL^1G!Z=Y0LETBUOc&)+jK0H!;R@cVp)}B z!+av9PMMuyV{2!M-?7c_d(5dL@(!2HBAiW#GDTetqQ-mnNq$@iQ9qbn`F2S)qC(2Z zk0j>RkpO~cc>eFki@$L+X$YOgcEc3K2E@M9t#!k=3!iYJRtgl-=ygu&oCp1B{}6en zSY|?Zs7;PfLp0xk!~(u|TXWLd#5Jiq^&{+(Uc|f$zC41D+y3emj14Tqqhu4FAZVQ_ zLezVmWAm9r4%j#J=!^K=fXXdIQXEtSWyGknyz$xT&b;DE7>SQFA$6BE3Lkox9S8Hx zU}z}2d?QMH?)%@mIk6qbrM6uJW>ySALBw3KqQMmXn0gEIANRs=&Yovzvg0_0?wM^J zgcIdLJ>N$Z+llMvUB5?-mawvJRlMal`S8t@az~PJI3Dn|UtMYPr;v-7J!${1Ar|3% zYCQ~Mw8+$5al<(9yxPlbLSqx$WEl@$LX@&70YqMdc$kVMDr2tfXPJW9pLG5Q0tUk- zO2b(;2Z$HGnw86YKMxLPz;tNyAH8p>B=KL?Vx6><7MbTyOE}$JOAop=TnW4O=q3CZ z8Nzwxw>xLxc_*jV)6%t)@k+3NZ>VH3y;!YKIGeVGfK`vRDv)u{X>)94Z#Hew*36m6 zlQTgjZDHN)50(dv>4nLSE7GSI%7-U|Acd-T3LJjv?Qe=E7__f zVi6A(p#yw>_RJOk-6DoX5Vk6Iv{HXlu-mY)U$#@5wEAi~GH%Ya<*xX*K4D)MM%U4$ z&N?FP>P!Bwe4-YcVfDh0|0PV&P_X~M7W$bm`ELjLA7KJN1I}!n|1V+kyoAh}%SwUnDRw^rm%wWl zB><+TQj47ft%t=ow~`&12FCCuRMX)UC_WikX*AY^ilkGdYv0`qQSx_iW$^R|oBXcx zfM}R@_L`1?iS@;0aF2WOLzwgQ8F0E#-@NIp*{q_=r?I@NtL^Y6McAZzj>v?8A3^I~@bGYRYcJPQL3E7RTi zea*HBS7IOs^6bmIhWf)RwPa%8SLck)a@@K(;+lO%sDpE2g z15oYq9=42^#6d&v6n(ST%yz2st?b&tioXB6_#MHtGH@LGz)w!K+(wf zCcTd=nFPfad_fT}UMt7I>N^pCN`R2)29N3FXm_pyL}LOg8O=7k(7}GN+VWbQJDE3c z%oVz|H*j~ZvKjjtBk9b6d^Qy1S7eq}&2~0}OCP3z{pWQi90hE8*mk`;r$Q^Nx}d@> zSeQEHqf-z~!B6u@J+5>;J&`OU+q(j>rGYI=+1mDlbE=NJHd>WmbGqfGtGr0TEb{ImJjW8eCkdrAeUIM{pj*RC(37wSg zP>N48FAas2{q@F*{if#uX=6D`sxeuI2u+p3yJDW$vQWpZj}|tAi5$frSx{1`IODrB zIFa%q1@JjCKj~0PglkDqfuVQ2t*}3ro##J*3ljH65aTmlt0UZQQqjN4cg`YpfO7&& zFW)uFZ3LG^{*6QjP@vJYt7X{T*7^2y76x^@cH56%c1=HOFB`%A)BUSrqN_G~CqjgX z7E^`f%G+ZiV4OCDYya~6rD|!Qk(eyo>uR2u0LeoM@-xOfM%4OJ0cuNcjhz+? zl?taS?=zr=*1v_Y2(jaCgYD{kv@c?QqRX$^aVIqX0qf+GNv?4!UTNy*d>id%QIhQOk$qYt&JwhoJqwdr$nU^y*dLTEdix|LX2QnXwFZBAcZH*%bZVLlDl)y%W6OL2>ov#o#&QDR?FS_F)U&C=}h~> zURbx77WT{i(kCPI*h<+|RU7M;%La>U+mZ76_cZIPgza5dIbt_YuAkyk5|Jq{fwYweyFZhMwhoRauH9ih!?@83pu#UU;tkmI8$XeO8VYJ7P8)#OwRA<}+dL z9=EnKXbRzDF%i(+*emf#a>@zQR@=9E*7$6rzw+* z-ao}%68s3}l~dE$FbH(HNoZDK%WJ>;y-^tLah$Nb+NUt1prP2;>8nJe`Q!7!7&bLS zTdSL#3fa6e6**!Wt@}ty`QYwXaR6)|MT$Y_e} zrrA*&!*5QH<2(wsua7Jzkrdc~hMNYLCN`7cRk8kV#DNhe`XP7@Qz3v>?}p>sH9)Bv zMFGZ?h>=Qd^@soW5G=Kg(YI;eYZsjr!TOYRS6uBV8Ldh>!jS&Xbo~984NjyR|9d){ zKDIU$J7pgpV@4fDC>oohL8b>oIoC)PNERTy0!Ah&!mwC9DVK!pMwE?Hn(YgUFXE$S zBw=jf;f=O9k?46~V&ZW2CYP!dmIO3^JgL2hKXSIge}YGozIB@+Mm3jtg$rgDP2Q4h zuGYb?hKjNjR2|WkxS$1qVeJ>-BtbSM@&fVHgR91AkZ5v3<$AR2pav)iWEfG`WR5zy zNu9_yt z12jLEDRx>8yT046T;S_*fklek^TvQ6FJhoWQ*fx|Ti2{V6G_9*O zu&hG8K}sYIs$UH%mbfx2+=HwyiOV241WXTDxDOPf9Vkh+F%Ev)HkM?)4awXPe^>0p zBZEE&CUcUp3+@s-^Paa3fr2a__}hmOZoM4(P?iBtEl387qZxN^ND)L4<56>-R=)o= zu!M_Yi=RX(sihDc&J-m~!{Q_-3$ z!kCwR?{_W=Rmzm3=FZYjLE>>1r0ZnRZbQ%Wzy?v2gx+5g8)l~Ytg=kKJZG9E{733>pDP4N#@{5S~#cVrwh~Vshd7I9PhLXg^lRO{ERF(6rA+hQH%3Q>B!%3yV}#0-vHdt3CV_l!B}K$XZ#x6Nm#N+d8xG6ueU zLP^OYouBSlNIaorA?JV>U-D{ZaD+~OkKp{q&>j<>$t6&1eg>rc<&JFbW#mrz66}KL zXuSUQp58-*ZSGKtDqhHR~( zhHm7UngR}EBxE&_N0OM`TrzYA6|#8x7gN!tv1cAnb|^U;^(=&uv6x{a+^Ug_{ZkYJ zNe$-~34#(E9MP*3KRfb#_<)JOZ=3w}jyH7f1?GuBJjfEA}%cP6S{Qu^yKNZCEqtlfy1;MgP~P?_MuvXPv;;vccED!4;q2o zE8`kCcOQrh>6=slsnSm$R5zFKFDJ%npc;?dbf<}4PJW{#%mkc!vz8`JAoA)k@r5<}>u9eBvIYNk)lqgs^K ziLrm)JdvI&K~forb<&x@m71C(p#UzYg3e6Vh;r~g8Q~}j1Ce5d(`#R7_p!s%&%87X zCe_8->?|UUbMa3h`bizLu0X_@cD9;NS}L@yqK_iWMmgSPg-`}`m81GM%6$AV@g*T+H_l@4D-(vuU|wU`qtt{T42PgG=|9K-45 z=Z<_7IPF%we;&LaU2e2JzodMZqAzE2&>Hz-IC0)h&}tVUW_}y#)LFa zV^iYh1{OQ;5&)AR?ly|&&i3BWJ{(0Wj&v5TMzHyamG{OK&4E|0IZdy2&};r0u1+iT z`6L5;0pgbpl)RcHn!5@q5%w}G%H_CZ`TO+Q%UdlXEo@!Kx!(C zNReQ3P`M#J;7LB@!3+SdrJe!Cs6-hwWB4Ui0`fII{D+nF2ju+K1qu<%<4uo+X~6RA&Zy_reu$Sfm@Cizc~=-vu@U4Y^{kz0gQ${z z-CYh9TvBXrRkY)jUQLxphsiTx5=V}Lcjew82{vIeVb8gYzKyVn&nyExr#$%RUlXD@riMIseNrsRVn0Rnf4<%zkb1*&S132FwNhi7((MCtK)VpevXCEv+-)L+k5&gV%{ zRl5pR;YbA9e(pCjRum;ertokUK}7@Jco2fAvz;-Bn-mk(53^tBo%pksfGK+fpE7;p zA)noXo9tz{N>C^^Y4}(PL!|5{`fO#bGe(Aa++oi$Hw6u<5BRs{87hU?j3*SZ9%Yo| z)So)fS?=3VG`Gg*Q5IwPu08h#lg)4TJ%{nN-@7815S_f^UDypi8iQaU8S!d+?<3h^ zE^6SunNK{9gYvjh<4T6}du3#K;ACBY0=`sH#4LgqR?uJGzlK*|qAn78J_xk`5De_2jdCPr3Q zuKgbMd2~Viab2wXI0j+%feviG^rVTj?I_LHPBHF6nZ@XL6cAG#b>{V?*B%{=iUoQor@oeEQ29ioj^dBq zJSF-^_Xa(x`<+CPK2vWd8ZGXFNUn?O#9?$*`z99PH-z8F*;HOGLD~Y5kJE_nij6~b6wVOf@9OiLdiuKOqo6C2Xbl(jo9!<0Jv*z*IHa!9K4I_| zGuwP5Oauk}kTOC8CuCdKcF6)f%l96Y5r5J!wTF?0fVukTQY99~$sc4k(IzO&EOmf)feAsJ-aE~~I zIdN+o@&$IE`744c-TvrKn`a4L#a90xX~yVSI-+lHAm4p(Oz0eW?zP>t1bw8}ag4)B zV*((QY!1Mt?Rb?;j7@!^lrth&LM)?bjDAX{u@rCTEp>#Il~!*DAaJu=d%d>%!)d;j zW8Uw)S3qotizpFua)1tPlS0Y-Up~=@@@pd>(!D=0(eQf9 zFgD=KwRY1ii=(S@MaHKil(el^C{CbyAnmMX#E7%$1uBEHczrp5{_1@kPXxv$qN9$oDwd`Xuij|SI|0!gBH`26dpj*6i*|SGZO9y261XCaz@#Cd- zXSlCh5&!RA(DnIsrCs4$c#~yu2=~ztWwM1Q?G`t;{`sY}N^#DL0Sdv#BkqCDWaehL zie`06dE4E}zXeAA!6aCChC+!>IMe-K(E|kUUjC_z0w7`%783dWZ~}c@*{Wl7OAsSC zPQ<}nF=-bBrq*~ptXd%n*i^>fHwsBrWjTYrX)PTYqP_NHAy&$otP=*PIm?Hr>!q~x zG%{%>Z<#4`5~w1+Y!9gcHw=oVNaY5Y(}JZ&vT;Q~Ou)n0N8PyI_6jtI!Ms$H_M%o$}|l-Q$zH%ng%*iEY_^E$=}?{P0yj?{IzO_cq9c8b=zwQDUw(L(R*K zoQ;iH`2x%Ao)nA2C-MH5SY_Br<#V5Rpn2bh(KSKKibLO0e$r~UBeNF1+ohPiJ!FnQ z>&dOhu|+-4O>4`VGca6a+()rg@Ydkh?&NRx$5qxVA-hhXoYo-G$8W=k`$nsVND$`B z<17CNSC9H#B2h_8Q}!Q>m5E<8Gf#ypX$Fo-KU%PPs9*>7J;S z5F4{WvDyjp(9g<;ox>)4iK`kF68xcM_5PArofw&ifg~d27b=4LA0Rl`qLnsf__CI{#Q6p0#(m(wrT+m9pzPcL diff --git a/build-ui/README.md b/docs/build-ui.md similarity index 100% rename from build-ui/README.md rename to docs/build-ui.md diff --git a/docs/build.md b/docs/build.md new file mode 100644 index 0000000..3b4d173 --- /dev/null +++ b/docs/build.md @@ -0,0 +1,113 @@ +# 📦 How to build your own containers + +## Building the s3gw container image + +This documentation will guide you through the several steps to build the +`s3gw` container image. + +> **NOTE:** The absolute paths mentioned in this document may be different +> on your system. + +### Prerequisites +Make sure you've installed the following applications: + +- podman +- buildah + +Optionally, if you prefer building an `s3gw` container image with Docker you will need: + +- docker + +The build scripts expect the following directory hierarchy. + +``` +| +|- ceph/ +| |- build/ +| ... +| +|- s3gw-core/ + |- build/ + ... +``` + +### Building the radosgw binary +To build the `radosgw` binary, a containerized build environment is used. +This container can be built by running the following command: + +``` +$ cd ~/git/s3gw-core/build +$ podman build --tag build-radosgw -f ./Dockerfile.build-radosgw +``` + +If you experience connection issues while downloading the packages to be +installed in the build environment, try using the `--net=host` +command line argument. + +After the build environment container image has been build once, the +`radosgw` binary will be build automatically when the container is +started. Make sure the path to the Ceph Git repository in the host +file system is correct, e.g. `../../ceph`, `~/git/ceph`, ... + +``` +$ podman run --replace --name build-radosgw -v ../../ceph/:/srv/ceph/ localhost/build-radosgw +``` + +By default, the `radosgw` binary file will be build in `Debug` mode. For production +builds set the environment variable `CMAKE_BUILD_TYPE` to `Release`, `RelWithDebInfo` +or `MinSizeRel`. Check the [CMAKE_BUILD_TYPE documentation](https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html) +for more information. + +``` +$ podman run --replace --name build-radosgw -e CMAKE_BUILD_TYPE="MinSizeRel" -v ../../ceph/:/srv/ceph/ localhost/build-radosgw +``` + +### Build the s3gw container image +If the Ceph `radosgw` binary is compiled, the container image can be build +with the following commands: + +``` +$ cd ~/git/s3gw-core/build +$ ./build-container.sh +``` + +By default, this will build an `s3gw` image using podman. +In order to build an `s3gw` image with Docker, you can run: + +``` +$ cd ~/git/s3gw-core/build +$ CONTAINER_ENGINE=docker ./build-container.sh +``` + +The container build script expects the `radosgw` binary at the relative +path `../ceph/build/bin`. This can be customized via the `CEPH_DIR` +environment variable. + +The container image name is `s3gw` by default. This can be customized via +the environment variable `IMAGE_NAME`. + +### Running the s3gw container +Finally, you can run the `s3gw` container with the following command: + +``` +$ podman run --replace --name=s3gw -it -p 7480:7480 localhost/s3gw +``` + +or, when using Docker: + +``` +$ docker run -p 7480:7480 localhost/s3gw +``` +By default, the container will run with the following arguments: + +```text +--rgw-backend-store dbstore +--debug-rgw 1 +``` + +You can override them passing different values when starting the container. +For example if you want to increase `radosgw` logging verbosity, you could run: + +```shell +$ podman run -p 7480:7480 localhost/s3gw --rgw-backend-store dbstore --debug-rgw 15 +``` diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 0000000..e9ba929 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,11 @@ +# Contributing +## Reporting an issue + +If one finds a problem, as one is bound to at this point in time, we encourage +everyone to check out our [issues list](https://github.com/aquarist-labs/s3gw-core/issues) +and either file a new issue if the observed behavior has not been reported +yet, or to contribute with further details to an existing issue. + +## Discussion + +You can join us in [Slack](https://join.slack.com/t/aquaristlabs/shared_invite/zt-nphn0jhg-QYKw__It8JPMkUR_sArOug). diff --git a/docs/developing.md b/docs/developing.md new file mode 100644 index 0000000..f469f2f --- /dev/null +++ b/docs/developing.md @@ -0,0 +1,89 @@ +# 🖥️ Developing the S3 Gateway +You can refer to the [development](./docs/development.md) section to understand how to build the `s3gw` container image. + +## Introduction + +Given we are still setting up the project, figuring out requirements, and +specific details about direction, we are dedicating most of our efforts to +testing Ceph's RGW as a standalone daemon using a non-RADOS storage backend. + +The backend in question is called `dbstore`, backed by a SQLite database, and is currently provided by RGW. + +In order to ensure we all test from the same point in time, we have a forked +version of the latest development version of Ceph, which can be found +[here](https://github.com/aquarist-labs/ceph.git). We are working using the +[`s3gw` branch](https://github.com/aquarist-labs/ceph/tree/s3gw) as our base of +reference. + +Keep in mind that this development branch will likely closely follow Ceph's +upstream main development branch, and is bound to change over time. We intend +to contribute whatever patches we come up with to the original project, thus +we need to keep up with its ever evolving state. + +## Requirements + +We are relying on built Ceph sources to test RGW. We don't have a particular +preference on how one achieves this. Some of us rely on containers to build +these sources, while others rely on whatever OS they have on their local +machines to do so. Eventually we intend to standardize how we obtain the +RGW binary, but that's not in our immediate plans. + +If one is new to Ceph development, the best way to find out how to build +these sources is to refer to the +[original documentation](https://docs.ceph.com/en/pacific/install/build-ceph/#id1). + +Because we are in a fast development effort at the moment, we have chosen to +apply patches needed to make our endeavour work on our own fork of the Ceph +repository. This allows us fiddle with the Ceph source while experimenting, +without polluting the upstream Ceph repository. We do intend to upstream any +patches that make sense though. + +That said, we have the `aquarist-labs/ceph` repository as a requirement for +this project. We can't guarantee that our instructions, or the project as a +whole, will work flawlessly with the original Ceph project from `ceph/ceph`. + +## Running the Gateway + +One should be able to get a standalone Gateway running following these steps: + +``` +cd build/ +mkdir -p dev/rgw.foo +bin/radosgw -i foo -d --no-mon-config --debug-rgw 15 \ + --rgw-backend-store dbstore \ + --rgw-data $(pwd)/dev/rgw.foo \ + --run-dir $(pwd)/dev/rgw.foo +``` + +Once the daemon is running, and outputting its logs to the terminal, one can +start issuing commands to the daemon. We rely on `s3cmd`, which can be found +on [github](https://github.com/s3tools/s3cmd) or obtained through `pip`. + +`s3cmd` will require to be configured to talk to RGW. This can be achieved by +first running `s3cmd -c $(pwd)/.s3cfg --configure`. By default, the configuration +file would be put under the user's home directory, but for our testing purposes +it might be better to place it somewhere less intrusive. + +During the interactive configuration a few things will be asked, and we +recommend using these answers unless one's deployment is different, in which +case these will need to be properly adapted. + +``` + Access Key: 0555b35654ad1656d804 + Secret Key: h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q== + Default Region: US + S3 Endpoint: 127.0.0.1:7480 + DNS-style bucket+hostname:port template for accessing a bucket: 127.0.0.1:7480/%(bucket) + Encryption password: **** + Path to GPG program: /usr/bin/gpg + Use HTTPS protocol: False + HTTP Proxy server name: + HTTP Proxy server port: 0 +``` + +Please note that both the `Access Key` and the `Secret Key` need to be copied +verbatim. Unfortunately, at this time, the `dbstore` backend statically creates +an initial user using these values. + +Should the configuration be correct, one will then be able to issue commands +against the running RGW. E.g., `s3cmd mb s3://foo`, to create a new bucket. diff --git a/docs/env-k3s.md b/docs/env-k3s.md new file mode 100644 index 0000000..7a4e254 --- /dev/null +++ b/docs/env-k3s.md @@ -0,0 +1,227 @@ +# K3s on Bare Metal + +This README will guide you through the setup of a K3s cluster on bare metal. +If you are looking for K3s cluster running on virtual machines, +refer to our [K3s on virtual machines](./README.vm.md). + +## Disabling firewalld + +In some host systems, including OpenSUSE Tumbleweed, one will need to disable +firewalld to ensure proper functioning of k3s and its pods: + +``` +$ sudo systemctl stop firewalld.service +``` + +This is something we intend figuring out in the near future. + +## From the internet + +One can easily setup k3s with s3gw from the internet, by running + +``` +$ curl -sfL https://raw.githubusercontent.com/aquarist-labs/s3gw-core/main/k3s/setup.sh | sh - +``` + +## From source repository + +To install a lightweight Kubernetes cluster for development purpose run +the following commands. It will install open-iscsi and K3s on your local +system. Additionally, it will deploy Longhorn and the s3gw in the cluster. + +``` +$ cd ~/git/s3gw-core/env +$ ./setup.sh +``` + +## Access the Longhorn UI + +The Longhorn UI can be access via the URL `http://longhorn.local`. + +## Access the S3 API + +The S3 API can be accessed via `http://s3gw.local`. + +We provide a [s3cmd](https://github.com/s3tools/s3cmd) configuration file +to easily communicate with the S3 gateway in the k3s cluster. + +``` +$ cd ~/git/s3gw-core/k3s +$ s3cmd -c ./s3cmd.cfg mb s3://foo +$ s3cmd -c ./s3cmd.cfg ls s3:// +``` + +Please adapt the `host_base` and `host_bucket` properties in the `s3cmd.cfg` +configuration file if your K3s cluster is not accessible via localhost. + +## Configure s3gw as Longhorn backup target + +Use the following values in the Longhorn settings page to use the s3gw as +backup target. + +Backup Target: `s3://@us/` +Backup Target Credential Secret: `s3gw-secret` + + +# K3s on Virtual Machines + +Follow this guide if you wish to run a K3s cluster installed on virtual machines. +You will have a certain degree of choice in terms of customization options. +If you are looking for a more lightweight environment running directly on bare metal, +refer to our [K3s on bare metal](./README.bm.md). + +## Table of Contents + +* [Description](#description) +* [Requirements](#requirements) +* [Supported Vagrant boxes](#supported-vagrant-boxes) +* [Building the environment](#building-the-environment) +* [Destroying the environment](#destroying-the-environment) +* [Accessing the environment](#accessing-the-environment) + * [ssh](#ssh) + + + +## Description + +The entire environment build process is automated by a set of Ansible playbooks. +The cluster is created with one `admin` node and +an arbitrary number of `worker` nodes. +A single virtual machine acting as an `admin` node is also possible; in this case, it +will be able to schedule pods as a `worker` node. +Name topology of nodes is the following: + +```text +admin-1 +worker-1 +worker-2 +... +``` + +## Requirements + +Make sure you have installed the following applications on your system: + +* Vagrant +* libvirt +* Ansible + +Make sure you have installed the following Ansible modules: + +* kubernetes.core +* community.docker.docker_image + +You can install them with: + +```bash +$ ansible-galaxy collection install kubernetes.core +... +$ ansible-galaxy collection install community.docker +... +``` + +## Supported Vagrant boxes + +* opensuse/Leap-15.3.x86_64 +* generic/ubuntu[1604-2004] + +## Building the environment + +You can build the environment with the `setup-vm.sh` script. +The simplest form you can use is: + +```bash +$ ./setup-vm.sh build +Building environment ... +``` + +This will trigger the build of a Kubernetes cluster formed by one node `admin` +and one node `worker`. +You can customize the build with the following environment variables: + +```text +BOX_NAME : The Vagrant box image used in the cluster (default: opensuse/Leap-15.3.x86_64) +VM_NET : The virtual machine subnet used in the cluster +VM_NET_LAST_OCTET_START : Vagrant will increment this value when creating vm(s) and assigning an ip +WORKER_COUNT : The number of Kubernetes node in the cluster +ADMIN_MEM : The RAM amount used by the admin node (Vagrant format) +ADMIN_CPU : The CPU amount used by the admin node (Vagrant format) +ADMIN_DISK : yes/no, when yes a disk will be allocated for the admin node - this will be effective only for mono clusters +ADMIN_DISK_SIZE : The disk size allocated for the admin node (Vagrant format) - this will be effective only for mono clusters +WORKER_MEM : The RAM amount used by a worker node (Vagrant format) +WORKER_CPU : The CPU amount used by a worker node (Vagrant format) +WORKER_DISK : yes/no, when yes a disk will be allocated for the worker node +WORKER_DISK_SIZE : The disk size allocated for a worker node (Vagrant format) +CONTAINER_ENGINE : The host's local container engine used to build the s3gw container (podman/docker) +STOP_AFTER_BOOTSTRAP : yes/no, when yes stop the provisioning just after the bootstrapping phase +S3GW_IMAGE : The s3gw's container image used when deploying the application on k3s +PROV_USER : The provisioning user used by Ansible (vagrant default) +S3GW_UI_REPO : A GitHub repository to be used when building the s3gw-ui's image +S3GW_UI_VERSION : A S3GW_UI_REPO's branch to be used +SCENARIO : An optional scenario to be loaded in the cluster +K3S_VERSION : The K3s version to be used (default: v1.23.6+k3s1) +``` + +So, you could start a more specialized build with: + +```bash +$ BOX_NAME=generic/ubuntu1804 WORKER_COUNT=4 ./setup-vm.sh build +Building environment ... +``` + +You create a mono virtual machine cluster with the lone `admin` node with: + +```bash +$ WORKER_COUNT=0 ./setup-vm.sh build +Building environment ... +``` + +In this case, the node will be able to schedule pods as a `worker` node. + +## Destroying the environment + +You can destroy a previously built environment with: + +```bash +$ ./setup-vm.sh destroy +Destroying environment ... +``` + +Be sure to match the `WORKER_COUNT` value with the one you used in the build phase. +Providing a lower value instead of the actual one will cause some allocated vm not +to be released by Vagrant. + +## Starting the environment + +You can start a previously built environment with: + +```bash +$ ./setup-vm.sh start +Starting environment ... +``` + +Be sure to match the `WORKER_COUNT` value with the one you used in the build phase. +Providing a lower value instead of the actual one will cause some allocated vm not +to start. + +## Accessing the environment + +### ssh + +You can connect through `ssh` to all nodes in the cluster. +To connect to the `admin` node run: + +```bash +$ ./setup-vm.sh ssh admin +Connecting to admin ... +``` + +To connect to a `worker` node run: + +```bash +$ ./setup-vm.sh ssh worker-2 +Connecting to worker-2 ... +``` + +When connecting to a worker node be sure to match the `WORKER_COUNT` +value with the one you used in the build phase. diff --git a/docs/env-k8s.md b/docs/env-k8s.md new file mode 100644 index 0000000..f2e0151 --- /dev/null +++ b/docs/env-k8s.md @@ -0,0 +1,146 @@ +# K8s + +Follow this guide if you wish to run an `s3gw` image on the latest stable Kubernetes release. +You will be able to quickly build a cluster installed on a set of virtual machines. +You will have a certain degree of choice in terms of customization options. +If you are looking for a more lightweight environment running directly on bare metal, +refer to our [K3s section](./README.k3s.md). + +## Table of Contents + +* [Description](#description) +* [Requirements](#requirements) +* [Building the environment](#building-the-environment) +* [Destroying the environment](#destroying-the-environment) +* [Accessing the environment](#accessing-the-environment) + * [ssh](#ssh) + + + +## Description + +The entire environment build process is automated by a set of Ansible playbooks. +The cluster is created with exactly one `admin` node and +an arbitrary number of `worker` nodes. +A single virtual machine acting as an `admin` node is also possible; in this case, it +will be able to schedule pods as a `worker` node. +Name topology for nodes is the following: + +```text +admin +worker-1 +worker-2 +... +``` + +## Requirements + +Make sure you have installed the following applications on your system: + +* Vagrant +* libvirt +* Ansible + +## Building the environment + +You can build the environment with the `setup-k8s.sh` script. +The simplest form you can use is: + +```bash +$ ./setup-k8s.sh build +Building environment ... +``` + +This will trigger the build of a Kubernetes cluster formed by one node `admin` +and one node `worker`. +You can customize the build with the following environment variables: + +```text +IMAGE_NAME : The Vagrant box image used in the cluster +VM_NET : The virtual machine subnet used in the cluster +VM_NET_LAST_OCTET_START : Vagrant will increment this value when creating vm(s) and assigning an ip +CIDR_NET : The CIDR subnet used by the Calico network plugin +WORKER_COUNT : The number of Kubernetes workers in the cluster +ADMIN_MEM : The RAM amount used by the admin node (Vagrant format) +ADMIN_CPU : The CPU amount used by the admin node (Vagrant format) +ADMIN_DISK : yes/no, when yes a disk will be allocated for the admin node - this will be effective only for mono clusters +ADMIN_DISK_SIZE : The disk size allocated for the admin node (Vagrant format) - this will be effective only for mono clusters +WORKER_MEM : The RAM amount used by a worker node (Vagrant format) +WORKER_CPU : The CPU amount used by a worker node (Vagrant format) +WORKER_DISK : yes/no, when yes a disk will be allocated for the worker node +WORKER_DISK_SIZE : The disk size allocated for a worker node (Vagrant format) +CONTAINER_ENGINE : The host's local container engine used to build the s3gw container (podman/docker) +STOP_AFTER_BOOTSTRAP : yes/no, when yes stop the provisioning just after the bootstrapping phase +START_LOCAL_REGISTRY : yes/no, when yes start a local insecure image registry at admin.local:5000 +S3GW_IMAGE : The s3gw's container image used when deploying the application on k8s +K8S_DISTRO : The Kubernetes distribution to install; specify k3s or k8s (k8s default) +INGRESS : The ingress implementation to be used; NGINX or Traefik (NGINX default) +PROV_USER : The provisioning user used by Ansible (vagrant default) +S3GW_UI_REPO : A GitHub repository to be used when building the s3gw-ui's image +S3GW_UI_VERSION : A S3GW_UI_REPO's branch to be used +SCENARIO : An optional scenario to be loaded in the cluster +``` + +So, you could start a more specialized build with: + +```bash +$ IMAGE_NAME=generic/ubuntu1804 WORKER_COUNT=4 ./setup-k8s.sh build +Building environment ... +``` + +You create a mono virtual machine cluster with the lone `admin` node with: + +```bash +$ WORKER_COUNT=0 ./setup-k8s.sh build +Building environment ... +``` + +In this case, the node will be able to schedule pods as a `worker` node. + +## Destroying the environment + +You can destroy a previously built environment with: + +```bash +$ ./setup-k8s.sh destroy +Destroying environment ... +``` + +Be sure to match the `WORKER_COUNT` value with the one you used in the build phase. +Providing a lower value instead of the actual one will cause some allocated vm not +to be released by Vagrant. + +## Starting the environment + +You can start a previously built environment with: + +```bash +$ ./setup-k8s.sh start +Starting environment ... +``` + +Be sure to match the `WORKER_COUNT` value with the one you used in the build phase. +Providing a lower value instead of the actual one will cause some allocated vm not +to start. + +## Accessing the environment + +### ssh + +You can connect through `ssh` to all nodes in the cluster. +To connect to the `admin` node run: + +```bash +$ ./setup-k8s.sh ssh admin +Connecting to admin ... +``` + +To connect to a `worker` node run: + +```bash +$ ./setup-k8s.sh ssh worker-2 +Connecting to worker-2 ... +``` + +When connecting to a worker node be sure to match the `WORKER_COUNT` +value with the one you used in the build phase. diff --git a/docs/s3-compatibility-table.md b/docs/s3-compatibility-table.md new file mode 100644 index 0000000..4e3d2ad --- /dev/null +++ b/docs/s3-compatibility-table.md @@ -0,0 +1,29 @@ +# S3 API compatibility +The following table describes the support status for current Amazon S3 functional features: + +| Feature | Status | +|---------------------------|---------| +| List Buckets | ✅ | +| Delete Bucket | ✅ | +| Create Bucket | ✅ | +| Put Object | ✅ | +| Delete Object | ✅ | +| Get Object | ✅ | +| Bucket Lifecycle | | +| Bucket Replication | | +| Policy (Buckets, Objects) | | +| Bucket Website | | +| Bucket ACLs (Get, Put) | | +| Bucket Location | | +| Bucket Notification | | +| Bucket Object Versions | | +| Get Bucket Info (HEAD) | | +| Bucket Request Payment | | +| Object ACLs (Get, Put) | | +| Get Object Info (HEAD) | | +| POST Object | | +| Copy Object | | +| Multipart Uploads | | +| Object Tagging | | +| Bucket Tagging | | +| Storage Class | | diff --git a/docs/s3gw-repos.md b/docs/s3gw-repos.md new file mode 100644 index 0000000..829021b --- /dev/null +++ b/docs/s3gw-repos.md @@ -0,0 +1,7 @@ +# S3GW Repositories +The S3 Gateway includes the following projects: + +* https://github.com/aquarist-labs/s3gw-core +* https://github.com/aquarist-labs/ceph +* https://github.com/aquarist-labs/s3gw-charts +* https://github.com/aquarist-labs/s3gw-status diff --git a/env/README.md b/env/README.md deleted file mode 100644 index f1cb20b..0000000 --- a/env/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# K3s environment running s3gw with Longhorn - -This is the entrypoint to setup a Kubernetes cluster running s3gw with Longhorn. -You can choose to install a **K3s** cluster directly on your machine -or on top of virtual machines. - -Refer to the appropriate section to proceed with the setup: - -* [K3s on bare metal](./README.bm.md) -* [K3s on virtual machines](./README.vm.md) - -## Ingresses - -Services are exposed with an Kubernetes ingress; each service category is -allocated on a separate virtual host: - -* **Longhorn dashboard**, on: `longhorn.local` -* **s3gw**, on: `s3gw.local` and `s3gw-no-tls.local` -* **s3gw s3 explorer**, on: `s3gw-ui.local` and `s3gw-ui-no-tls.local` - -Host names are exposed with a node port service listening on ports -30443 (https) and 30080 (http). -You are required to resolve these names with the external ip of one -of the nodes of the cluster. - -When you are running the cluster on a virtual machine, -you can patch host's `/etc/hosts` file as follow: - -```text -10.46.201.101 longhorn.local s3gw.local s3gw-no-tls.local s3gw-ui.local s3gw-ui-no-tls.local -``` - -This makes host names resolving with the admin node. -Otherwise, when you are running the cluster on bare metal, -you can patch host's `/etc/hosts` file as follow: - -```text -127.0.0.1 longhorn.local s3gw.local s3gw-no-tls.local s3gw-ui.local s3gw-ui-no-tls.local -``` - -Services can now be accessed at: - -```text -https://longhorn.local:30443 -https://s3gw.local:30443 -http://s3gw-no-tls.local:30080 -https://s3gw-ui.local:30443 -http://s3gw-ui-no-tls.local:30080 -```