# runwasi
## Action tasks
- [x] Add 4 demo cases with containerd in [page](https://github.com/second-state/runwasi/tree/main/demo), [PR7](https://github.com/second-state/runwasi/pull/7)
- [x] [Hyper](https://github.com/WasmEdge/wasmedge_hyper_demo)
- [x] [hyper-client](https://github.com/WasmEdge/wasmedge_hyper_demo/tree/main/client)
- [x] [hyper-server](https://github.com/WasmEdge/wasmedge_hyper_demo/tree/main/server)
partial behavior as expected, has kill task not working issue
- [x] [Reqwest](https://github.com/WasmEdge/wasmedge_reqwest_demo)
- [x] [SQL / DB](https://github.com/WasmEdge/wasmedge-db-examples)
- [x] [sync insert / query](https://github.com/WasmEdge/wasmedge-db-examples/tree/main/mysql)
- [x] [async](https://github.com/WasmEdge/wasmedge-db-examples/tree/main/mysql_async)
- [x] [Micro Service with MySQL](https://github.com/second-state/microservice-rust-mysql)
partial behavior as expected, has kill task not working issue
> **known issue**
> DB relative demo only work with mysql service installed on host machine, but with uncertain issue when interact with mysql service run inside official docker container.
- [x] Fix cross compile image for docker desktop fail (broken because WasmEdge not as sub-tree folder inside runwasi repo anymore), [PR5](https://github.com/second-state/runwasi/pull/5)
- [x] Fix kill task still stuck in async demo, [PR9](https://github.com/second-state/runwasi/pull/9)
- [x] Fix network issue mentioned by Chris, [PR3](https://github.com/WasmEdge/wasmedge_hyper_demo/pull/3)
https://gist.github.com/chris-crone/e6644a1d094461301ba32db15f372ef9
## Setup tutorial
1. Install [docker engine](https://docs.docker.com/engine/install/ubuntu/)
```shell=
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo service docker start
```
2. Manual install docker-cli plugin ([buildx](https://docs.docker.com/build/buildx/install/), compose)
```shell=
mkdir ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
wget https://github.com/docker/buildx/releases/download/v0.9.1/buildx-v0.9.1.linux-amd64 -O ~/.docker/cli-plugins/docker-buildx
chmod +x ~/.docker/cli-plugins/docker-buildx
```
3. Install wasmedge
```shell=
$ curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
$ sudo -E sh -c 'echo "$HOME/.wasmedge/lib" > /etc/ld.so.conf.d/libwasmedge.conf'
$ sudo ldconfig
```
4. Install wasmedge shim from runwasi repo
```shell=
git clone https://github.com/second-state/runwasi.git
cd runwasi
make build
sudo make install
```
5. Run docker (compose) or containerd with shim together
First, because the shim will be installed into `/usr/local/bin`, so make sure your env `PATH` including this. If wasmedge shim installed ready, then you can just run docker or ctr command specifies runtime to `io.containerd.wasmedge.v1`. For example
```shell=
sudo ctr run --rm --net-host --runtime=io.containerd.wasmedge.v1 docker.io/library/hyper-demo:latest testserver /server.wasm
```
or run `docker compose up` inside [hyper-demo](https://github.com/WasmEdge/wasmedge_hyper_demo), the docker-compose.yml is already set runtime use `io.containerd.wasmedge.v1`. The key point is symbol `io.containerd.wasmedge.v1` will be auto resolved to shim binary on the host. That why we need install shim into our `PATH` and and the binary names should be consist.
> Appendix
> I think step 1 ~ 2 could be omitted if you install [docker-desktop](https://docs.docker.com/desktop/install/ubuntu/) directly. But I have not run with this way.
> And if our runtime has been migrated to docker-desktop ready, I think step 1 ~4 could be omitte.