[demos] Add grpc tls demo
This commit is contained in:
parent
1229de1fd1
commit
731b2e1ae2
64
demos/grpc/grpc_tls/Makefile.patch
Normal file
64
demos/grpc/grpc_tls/Makefile.patch
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
--- Makefile-orig 2022-01-04 08:37:31.975521982 +0000
|
||||||
|
+++ Makefile 2022-01-04 08:37:58.709192999 +0000
|
||||||
|
@@ -16,29 +16,32 @@
|
||||||
|
|
||||||
|
HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
|
||||||
|
SYSTEM ?= $(HOST_SYSTEM)
|
||||||
|
-CXX = g++
|
||||||
|
-CPPFLAGS += `pkg-config --cflags protobuf grpc`
|
||||||
|
+CXX = occlum-g++
|
||||||
|
+CPPFLAGS += -I/usr/local/occlum/x86_64-linux-musl/include
|
||||||
|
CXXFLAGS += -std=c++11
|
||||||
|
ifeq ($(SYSTEM),Darwin)
|
||||||
|
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++ grpc`\
|
||||||
|
-pthread\
|
||||||
|
-lgrpc++_reflection\
|
||||||
|
- -ldl
|
||||||
|
+ -ldl \
|
||||||
|
+ -lssl -lcrypto
|
||||||
|
else
|
||||||
|
-LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++ grpc`\
|
||||||
|
+LDFLAGS += -L/usr/local/occlum/x86_64-linux-musl/lib -lgrpc++ -lgrpc -lprotobuf -lgpr \
|
||||||
|
+ -lcares -lz -laddress_sorting -pie\
|
||||||
|
-pthread\
|
||||||
|
-Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed\
|
||||||
|
- -ldl
|
||||||
|
+ -ldl \
|
||||||
|
+ -lssl -lcrypto
|
||||||
|
endif
|
||||||
|
PROTOC = protoc
|
||||||
|
GRPC_CPP_PLUGIN = grpc_cpp_plugin
|
||||||
|
GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`
|
||||||
|
|
||||||
|
-PROTOS_PATH = ../../protos
|
||||||
|
+PROTOS_PATH = .
|
||||||
|
|
||||||
|
vpath %.proto $(PROTOS_PATH)
|
||||||
|
|
||||||
|
-all: system-check greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server
|
||||||
|
+all: system-check greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server greeter_secure_client greeter_secure_server
|
||||||
|
|
||||||
|
greeter_client: helloworld.pb.o helloworld.grpc.pb.o greeter_client.o
|
||||||
|
$(CXX) $^ $(LDFLAGS) -o $@
|
||||||
|
@@ -55,6 +58,12 @@ greeter_async_client2: helloworld.pb.o h
|
||||||
|
greeter_async_server: helloworld.pb.o helloworld.grpc.pb.o greeter_async_server.o
|
||||||
|
$(CXX) $^ $(LDFLAGS) -o $@
|
||||||
|
|
||||||
|
+greeter_secure_client: helloworld.pb.o helloworld.grpc.pb.o greeter_secure_client.o
|
||||||
|
+ $(CXX) $^ $(LDFLAGS) -o $@
|
||||||
|
+
|
||||||
|
+greeter_secure_server: helloworld.pb.o helloworld.grpc.pb.o greeter_secure_server.o
|
||||||
|
+ $(CXX) $^ $(LDFLAGS) -o $@
|
||||||
|
+
|
||||||
|
.PRECIOUS: %.grpc.pb.cc
|
||||||
|
%.grpc.pb.cc: %.proto
|
||||||
|
$(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
|
||||||
|
@@ -64,7 +73,7 @@ greeter_async_server: helloworld.pb.o he
|
||||||
|
$(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- rm -f *.o *.pb.cc *.pb.h greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server
|
||||||
|
+ rm -f *.o *.pb.cc *.pb.h greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server greeter_secure_server greeter_secure_client
|
||||||
|
|
||||||
|
|
||||||
|
# The following is to test your system and ensure a smoother experience.
|
35
demos/grpc/grpc_tls/README.md
Normal file
35
demos/grpc/grpc_tls/README.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Run gRPC TLS C++ Client/Server on Occlum
|
||||||
|
|
||||||
|
## Step 1:
|
||||||
|
Downlaod, build and install openssl into `/usr/local/occlum/x86_64-linux-musl/lib`:
|
||||||
|
```
|
||||||
|
./download_and_install_openssl.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 2:
|
||||||
|
Download, build and install cares, protobuf and finally gRPC into `/usr/local/occlum/x86_64-linux-musl/lib`:
|
||||||
|
```
|
||||||
|
./download_and_install_grpc.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 3:
|
||||||
|
Prepare the gRPC TLS C++ Hello World demo Occlum instance, which consists of a client and server:
|
||||||
|
```
|
||||||
|
./prepare_occlum_instance.sh
|
||||||
|
```
|
||||||
|
Then you can see two occlum instance created for server(`occlum_server`) and client(`occlum_client`).
|
||||||
|
|
||||||
|
## Step 4:
|
||||||
|
Start `tls server` which will listen on port `50051` on occlum:
|
||||||
|
```
|
||||||
|
cd occlum_server
|
||||||
|
occlum run /bin/greeter_secure_server
|
||||||
|
```
|
||||||
|
|
||||||
|
Then you can invoke gRPC service by running `tls client` in a different terminal on occlum:
|
||||||
|
```
|
||||||
|
cd occlum_client
|
||||||
|
occlum run /bin/greeter_secure_client
|
||||||
|
```
|
||||||
|
|
||||||
|
And you will see the "Greeter received: Hello world" in the client side output.
|
65
demos/grpc/grpc_tls/download_and_install_grpc.sh
Executable file
65
demos/grpc/grpc_tls/download_and_install_grpc.sh
Executable file
@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
INSTALL_DIR=/usr/local/occlum/x86_64-linux-musl
|
||||||
|
GRPC_VER=1.24.3
|
||||||
|
GRPC_SRC_DIR=$PWD/grpc-src
|
||||||
|
CARES_VER=1_15_0
|
||||||
|
RPOTOBUF_VER=3.10.0
|
||||||
|
|
||||||
|
export PATH=$PATH:$INSTALL_DIR/bin
|
||||||
|
# Tell CMake to search for packages in Occlum toolchain's directory only
|
||||||
|
export PKG_CONFIG_LIBDIR=$INSTALL_DIR/lib
|
||||||
|
|
||||||
|
# Download grpc
|
||||||
|
wget https://github.com/grpc/grpc/archive/refs/tags/v${GRPC_VER}.tar.gz
|
||||||
|
rm -rf ${GRPC_SRC_DIR} && mkdir ${GRPC_SRC_DIR}
|
||||||
|
tar zxvf v${GRPC_VER}.tar.gz -C ${GRPC_SRC_DIR} --strip-components 1
|
||||||
|
|
||||||
|
# Download and Install c-ares
|
||||||
|
wget https://github.com/c-ares/c-ares/archive/refs/tags/cares-${CARES_VER}.tar.gz
|
||||||
|
tar zxvf cares-${CARES_VER}.tar.gz -C ${GRPC_SRC_DIR}/third_party/cares/cares/ --strip-components 1
|
||||||
|
cd $GRPC_SRC_DIR/third_party/cares/cares
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake ../ \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=occlum-gcc \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
|
||||||
|
|
||||||
|
make -j$(nproc)
|
||||||
|
make install
|
||||||
|
|
||||||
|
cd $PWD
|
||||||
|
|
||||||
|
# Download and Install protobuf
|
||||||
|
wget https://github.com/protocolbuffers/protobuf/archive/refs/tags/v${RPOTOBUF_VER}.tar.gz
|
||||||
|
tar zxvf v${RPOTOBUF_VER}.tar.gz -C $GRPC_SRC_DIR/third_party/protobuf/ --strip-components 1
|
||||||
|
cd $GRPC_SRC_DIR/third_party/protobuf
|
||||||
|
cd cmake
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake ../ \
|
||||||
|
-Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=TRUE \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=occlum-gcc \
|
||||||
|
-DCMAKE_CXX_COMPILER=occlum-g++ -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
|
||||||
|
-DCMAKE_NO_SYSTEM_FROM_IMPORTED=TRUE
|
||||||
|
|
||||||
|
make -j$(nproc)
|
||||||
|
make install
|
||||||
|
|
||||||
|
cp $INSTALL_DIR/bin/protoc /usr/bin
|
||||||
|
|
||||||
|
# Install gRPC
|
||||||
|
cd $GRPC_SRC_DIR/cmake
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake ../.. \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=occlum-gcc \
|
||||||
|
-DCMAKE_CXX_COMPILER=occlum-g++ -DgRPC_INSTALL=ON -DgRPC_PROTOBUF_PROVIDER=package \
|
||||||
|
-DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package \
|
||||||
|
-DgRPC_SSL_PROVIDER=package -DCMAKE_PREFIX_PATH=$INSTALL_DIR \
|
||||||
|
-DCMAKE_NO_SYSTEM_FROM_IMPORTED=TRUE -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
|
||||||
|
|
||||||
|
make -j$(nproc)
|
||||||
|
make install
|
||||||
|
echo "gRPC build success"
|
17
demos/grpc/grpc_tls/download_and_install_openssl.sh
Executable file
17
demos/grpc/grpc_tls/download_and_install_openssl.sh
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#copyright@antfinancial:adopted from a script written by geding
|
||||||
|
set -e
|
||||||
|
|
||||||
|
git clone http://github.com/openssl/openssl
|
||||||
|
cd openssl
|
||||||
|
git checkout tags/OpenSSL_1_1_1
|
||||||
|
CC=occlum-gcc ./config \
|
||||||
|
--prefix=/usr/local/occlum/x86_64-linux-musl \
|
||||||
|
--openssldir=/usr/local/occlum/x86_64-linux-musl/ssl \
|
||||||
|
--with-rand-seed=rdcpu \
|
||||||
|
no-async no-zlib
|
||||||
|
|
||||||
|
make -j$(nproc)
|
||||||
|
make install
|
||||||
|
|
||||||
|
echo "build and install openssl success!"
|
26
demos/grpc/grpc_tls/gen-cert.sh
Executable file
26
demos/grpc/grpc_tls/gen-cert.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pushd ~
|
||||||
|
openssl rand -writerand .rnd
|
||||||
|
popd
|
||||||
|
|
||||||
|
# Generate valid CA
|
||||||
|
openssl genrsa -out ca.key 4096
|
||||||
|
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/OU=Test/CN=Root CA"
|
||||||
|
|
||||||
|
# Generate valid Server Key/Cert
|
||||||
|
openssl genrsa -out server.key 4096
|
||||||
|
openssl req -new -key server.key -out server.csr -subj "/OU=Server/CN=localhost"
|
||||||
|
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
|
||||||
|
|
||||||
|
# Remove passphrase from the Server Key
|
||||||
|
openssl rsa -in server.key -out server.key
|
||||||
|
|
||||||
|
# Generate valid Client Key/Cert
|
||||||
|
openssl genrsa -out client.key 4096
|
||||||
|
openssl req -new -key client.key -out client.csr -subj "/OU=Client/CN=localhost"
|
||||||
|
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
|
||||||
|
|
||||||
|
# Remove passphrase from Client Key
|
||||||
|
openssl rsa -in client.key -out client.key
|
||||||
|
|
104
demos/grpc/grpc_tls/greeter_secure_client.cc
Normal file
104
demos/grpc/grpc_tls/greeter_secure_client.cc
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <grpc++/grpc++.h>
|
||||||
|
|
||||||
|
#include "helloworld.grpc.pb.h"
|
||||||
|
|
||||||
|
using grpc::Channel;
|
||||||
|
using grpc::ClientContext;
|
||||||
|
using grpc::Status;
|
||||||
|
|
||||||
|
using helloworld::HelloRequest;
|
||||||
|
using helloworld::HelloReply;
|
||||||
|
using helloworld::Greeter;
|
||||||
|
|
||||||
|
class GreeterClient
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GreeterClient ( const std::string& cert,
|
||||||
|
const std::string& key,
|
||||||
|
const std::string& root,
|
||||||
|
const std::string& server )
|
||||||
|
{
|
||||||
|
grpc::SslCredentialsOptions opts =
|
||||||
|
{
|
||||||
|
root,
|
||||||
|
key,
|
||||||
|
cert
|
||||||
|
};
|
||||||
|
|
||||||
|
stub_ = Greeter::NewStub ( grpc::CreateChannel (
|
||||||
|
server, grpc::SslCredentials ( opts ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string
|
||||||
|
SayHello ( const std::string& user )
|
||||||
|
{
|
||||||
|
HelloRequest request;
|
||||||
|
request.set_name(user);
|
||||||
|
|
||||||
|
HelloReply reply;
|
||||||
|
|
||||||
|
ClientContext context;
|
||||||
|
|
||||||
|
Status status = stub_->SayHello ( &context, request, &reply );
|
||||||
|
|
||||||
|
if ( status.ok () )
|
||||||
|
{
|
||||||
|
return reply.message ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << status.error_code () << ": "
|
||||||
|
<< status.error_message () << std::endl;
|
||||||
|
return "RPC failed";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<Greeter::Stub> stub_;
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
read ( const std::string& filename, std::string& data )
|
||||||
|
{
|
||||||
|
std::ifstream file ( filename.c_str (), std::ios::in );
|
||||||
|
|
||||||
|
if ( file.is_open () )
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << file.rdbuf ();
|
||||||
|
|
||||||
|
file.close ();
|
||||||
|
|
||||||
|
data = ss.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ( int argc, char** argv )
|
||||||
|
{
|
||||||
|
std::string cert;
|
||||||
|
std::string key;
|
||||||
|
std::string root;
|
||||||
|
std::string server { "localhost:50051" };
|
||||||
|
|
||||||
|
read ( "client.crt", cert );
|
||||||
|
read ( "client.key", key );
|
||||||
|
read ( "ca.crt", root );
|
||||||
|
|
||||||
|
GreeterClient greeter ( cert, key, root, server );
|
||||||
|
|
||||||
|
std::string user ( "world" );
|
||||||
|
std::string reply = greeter.SayHello ( user );
|
||||||
|
|
||||||
|
std::cout << "Greeter received: " << reply << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
98
demos/grpc/grpc_tls/greeter_secure_server.cc
Normal file
98
demos/grpc/grpc_tls/greeter_secure_server.cc
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <grpc++/grpc++.h>
|
||||||
|
|
||||||
|
#include "helloworld.grpc.pb.h"
|
||||||
|
|
||||||
|
using grpc::Server;
|
||||||
|
using grpc::ServerBuilder;
|
||||||
|
using grpc::ServerContext;
|
||||||
|
using grpc::Status;
|
||||||
|
|
||||||
|
using helloworld::HelloRequest;
|
||||||
|
using helloworld::HelloReply;
|
||||||
|
using helloworld::Greeter;
|
||||||
|
|
||||||
|
class GreeterServiceImpl final : public Greeter::Service
|
||||||
|
{
|
||||||
|
Status SayHello ( ServerContext* context,
|
||||||
|
const HelloRequest* request,
|
||||||
|
HelloReply* reply ) override
|
||||||
|
{
|
||||||
|
std::string prefix ( "Hello " );
|
||||||
|
|
||||||
|
reply->set_message ( prefix + request->name () );
|
||||||
|
|
||||||
|
return Status::OK;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
read ( const std::string& filename, std::string& data )
|
||||||
|
{
|
||||||
|
std::ifstream file ( filename.c_str (), std::ios::in );
|
||||||
|
|
||||||
|
if ( file.is_open () )
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << file.rdbuf ();
|
||||||
|
|
||||||
|
file.close ();
|
||||||
|
|
||||||
|
data = ss.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
runServer()
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* [!] Be carefull here using one cert with the CN != localhost. [!]
|
||||||
|
**/
|
||||||
|
std::string server_address ( "localhost:50051" );
|
||||||
|
|
||||||
|
std::string key;
|
||||||
|
std::string cert;
|
||||||
|
std::string root;
|
||||||
|
|
||||||
|
read ( "server.crt", cert );
|
||||||
|
read ( "server.key", key );
|
||||||
|
read ( "ca.crt", root );
|
||||||
|
|
||||||
|
ServerBuilder builder;
|
||||||
|
|
||||||
|
grpc::SslServerCredentialsOptions::PemKeyCertPair keycert =
|
||||||
|
{
|
||||||
|
key,
|
||||||
|
cert
|
||||||
|
};
|
||||||
|
|
||||||
|
grpc::SslServerCredentialsOptions sslOps;
|
||||||
|
sslOps.pem_root_certs = root;
|
||||||
|
sslOps.pem_key_cert_pairs.push_back ( keycert );
|
||||||
|
|
||||||
|
builder.AddListeningPort(server_address, grpc::SslServerCredentials( sslOps ));
|
||||||
|
|
||||||
|
GreeterServiceImpl service;
|
||||||
|
builder.RegisterService(&service);
|
||||||
|
|
||||||
|
std::unique_ptr < Server > server ( builder.BuildAndStart () );
|
||||||
|
std::cout << "Server listening on " << server_address << std::endl;
|
||||||
|
|
||||||
|
server->Wait ();
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ( int argc, char** argv )
|
||||||
|
{
|
||||||
|
runServer();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
13
demos/grpc/grpc_tls/grpc_secure_client.yaml
Normal file
13
demos/grpc/grpc_tls/grpc_secure_client.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
includes:
|
||||||
|
- base.yaml
|
||||||
|
targets:
|
||||||
|
- target: /bin/
|
||||||
|
copy:
|
||||||
|
- files:
|
||||||
|
- ../build/greeter_secure_client
|
||||||
|
- target: /
|
||||||
|
copy:
|
||||||
|
- files:
|
||||||
|
- ../client.crt
|
||||||
|
- ../client.key
|
||||||
|
- ../ca.crt
|
13
demos/grpc/grpc_tls/grpc_secure_server.yaml
Normal file
13
demos/grpc/grpc_tls/grpc_secure_server.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
includes:
|
||||||
|
- base.yaml
|
||||||
|
targets:
|
||||||
|
- target: /bin/
|
||||||
|
copy:
|
||||||
|
- files:
|
||||||
|
- ../build/greeter_secure_server
|
||||||
|
- target: /
|
||||||
|
copy:
|
||||||
|
- files:
|
||||||
|
- ../server.crt
|
||||||
|
- ../server.key
|
||||||
|
- ../ca.crt
|
55
demos/grpc/grpc_tls/prepare_occlum_instance.sh
Executable file
55
demos/grpc/grpc_tls/prepare_occlum_instance.sh
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
INSTALL_DIR=/usr/local/occlum/x86_64-linux-musl
|
||||||
|
export PATH=$PATH:$INSTALL_DIR/bin
|
||||||
|
GRPC_SRC_DIR=$PWD/grpc-src
|
||||||
|
WORK_DIR=$PWD
|
||||||
|
|
||||||
|
rm -rf build && mkdir build
|
||||||
|
pushd build
|
||||||
|
|
||||||
|
cp -R ${GRPC_SRC_DIR}/examples/cpp/helloworld/. .
|
||||||
|
patch Makefile -i ${WORK_DIR}/Makefile.patch
|
||||||
|
|
||||||
|
cp ${GRPC_SRC_DIR}/examples/protos/helloworld.proto .
|
||||||
|
cp ${WORK_DIR}/*.cc .
|
||||||
|
|
||||||
|
make -j$(nproc)
|
||||||
|
|
||||||
|
popd
|
||||||
|
|
||||||
|
# Generate demo ca/csr/crt
|
||||||
|
./gen-cert.sh
|
||||||
|
|
||||||
|
# Build server occlum instance
|
||||||
|
rm -rf occlum_server
|
||||||
|
occlum new occlum_server
|
||||||
|
cd occlum_server
|
||||||
|
|
||||||
|
rm -rf image && \
|
||||||
|
copy_bom -f ../grpc_secure_server.yaml --root image --include-dir /opt/occlum/etc/template && \
|
||||||
|
occlum build
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "occlum build failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build client occlum instance
|
||||||
|
cd $WORK_DIR
|
||||||
|
rm -rf occlum_client
|
||||||
|
occlum new occlum_client
|
||||||
|
cd occlum_client
|
||||||
|
|
||||||
|
rm -rf image && \
|
||||||
|
copy_bom -f ../grpc_secure_client.yaml --root image --include-dir /opt/occlum/etc/template && \
|
||||||
|
occlum build
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "occlum build failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in New Issue
Block a user