[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