Add symbolic file support for FISH demo

This commit is contained in:
Hui, Chunyang 2020-06-09 07:27:38 +00:00 committed by Tate, Hongliang Tian
parent bddb87a11b
commit 9ce23a8c08
5 changed files with 34 additions and 29 deletions

@ -1,12 +1,18 @@
{ {
"vm": { "resource_limits": {
"user_space_size": "512MB" "user_space_size": "512MB",
"kernel_space_heap_size": "32MB",
"kernel_space_stack_size": "1MB",
"max_num_of_threads": 32
}, },
"process": { "process": {
"default_stack_size": "4MB", "default_stack_size": "4MB",
"default_heap_size": "32MB", "default_heap_size": "32MB",
"default_mmap_size": "80MB" "default_mmap_size": "80MB"
}, },
"entry_points": [
"/bin"
],
"env": { "env": {
"default": [ "default": [
"OCCLUM=yes", "OCCLUM=yes",
@ -15,9 +21,11 @@
"untrusted": [ "untrusted": [
] ]
}, },
"entry_points": [ "metadata": {
"/bin" "product_id": 0,
], "version_number": 0,
"debuggable": true
},
"mount": [ "mount": [
{ {
"target": "/", "target": "/",

@ -11,12 +11,15 @@ for most of the utilities you usually find in GNU fileutils, shellutils, etc.
This shell script contains executable binaries, pipe symbols and output redirection like this: This shell script contains executable binaries, pipe symbols and output redirection like this:
``` ```
busybox echo "Hello-world-from-fish" | busybox awk '$1=$1' FS="-" OFS=" " > /root/output.txt command echo "Hello-world-from-fish" | awk '$1=$1' FS="-" OFS=" " > /root/output.txt
cat /root/output.txt
``` ```
which is defined in `fish_script.sh`. `awk` will replace `-` to `space` and should output result which is defined in `fish_script.sh`. `awk` will replace `-` to `space` and should output result
string `Hello world from fish` and store in `/root/output.txt` of Occlum SEFS and can only be read string `Hello world from fish` and store in `/root/output.txt` of Occlum SEFS and can only be read
inside Occlum. inside Occlum. `echo`, `awk`, `cat` here are actually symbolic files linked to busybox and in this way, we don't need
to write `busybox` prefix. The `command` keyword tells FISH that `echo` is an external command because FISH also provides
builtin `echo` command.
## Step 1: ## Step 1:
Downlaod FISH and busybox and build them with Occlum tool chain: Downlaod FISH and busybox and build them with Occlum tool chain:
@ -25,26 +28,13 @@ Downlaod FISH and busybox and build them with Occlum tool chain:
``` ```
## Step 2: ## Step 2:
Prepare environment by running: Run command to prepare context and execute script:
``` ```
./env_setup.sh ./run_fish_test.sh
``` ```
Or if this demo is running on non-SGX platform, use:
If user wants to run this demo on non-SGX platform, run command:
``` ```
SGX_MODE=SIM ./env_setup.sh SGX_MODE=SIM ./run_fish_test.sh
```
## Step 3:
Run command to execute script:
```
cd occlum-context && occlum run /bin/fish /fish_script.sh
```
## Step 4:
Go to `occlum-context` and check result by running:
```
occlum run /bin/busybox cat /root/output.txt
``` ```
And you should see `Hello world from fish`. And you should see `Hello world from fish`.

@ -6,7 +6,7 @@ git clone -b v6.1 --depth 1 https://github.com/mirror/ncurses.git
cd ncurses cd ncurses
CC=occlum-gcc CXX=occlum-g++ CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC" LDFLAGS="-pie" \ CC=occlum-gcc CXX=occlum-g++ CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC" LDFLAGS="-pie" \
./configure --without-shared --without-cxx-shared --prefix=/usr/local/occlum --enable-overwrite ./configure --without-shared --without-cxx-shared --prefix=/usr/local/occlum --enable-overwrite
make && make install make -j$(nproc) && make install
cd .. cd ..
# download and build FISH # download and build FISH
@ -22,7 +22,7 @@ cmake ../ -DCMAKE_BUILD_TYPE=Debug -DCURSES_LIBRARY=/opt/occlum/toolchains/gcc/
-DCMAKE_C_COMPILER_RANLIB=/usr/local/occlum/bin/occlum-ranlib \ -DCMAKE_C_COMPILER_RANLIB=/usr/local/occlum/bin/occlum-ranlib \
-DCMAKE_LINKER=/usr/local/occlum/bin/occlum-ld -DCMAKE_C_FLAGS="-I/usr/local/occlum/include -fpic -pie" \ -DCMAKE_LINKER=/usr/local/occlum/bin/occlum-ld -DCMAKE_C_FLAGS="-I/usr/local/occlum/include -fpic -pie" \
-DCMAKE_CXX_FLAGS="-I/usr/local/occlum/include -fpic -pie" -DCMAKE_CXX_FLAGS="-I/usr/local/occlum/include -fpic -pie"
make make -j$(nproc)
cd ../../ cd ../../
# download and build busybox # download and build busybox
@ -31,4 +31,4 @@ cd busybox
CROSS_COMPILE=/opt/occlum/toolchains/gcc/bin/occlum- CROSS_COMPILE=/opt/occlum/toolchains/gcc/bin/occlum-
make CROSS_COMPILE="$CROSS_COMPILE" defconfig make CROSS_COMPILE="$CROSS_COMPILE" defconfig
cp ../.config . cp ../.config .
make CROSS_COMPILE="$CROSS_COMPILE" make CROSS_COMPILE="$CROSS_COMPILE" -j$(nproc)

@ -1,2 +1,3 @@
#! /bin/fish #! /bin/fish
busybox echo "Hello-world-from-fish" | busybox awk '$1=$1' FS="-" OFS=" " > /root/output.txt command echo "Hello-world-from-fish" | awk '$1=$1' FS="-" OFS=" " > /root/output.txt
cat /root/output.txt

@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
set -e set -e
#
rm -rf occlum-context rm -rf occlum-context
mkdir occlum-context && cd occlum-context mkdir occlum-context && cd occlum-context
occlum init occlum init
@ -9,5 +8,12 @@ cp ../Occlum.json .
cp ../fish-shell/build/fish image/bin cp ../fish-shell/build/fish image/bin
cp ../busybox/busybox image/bin cp ../busybox/busybox image/bin
cp ../fish_script.sh image cp ../fish_script.sh image
pushd image/bin
ln -s /bin/busybox cat
ln -s /bin/busybox echo
ln -s /bin/busybox awk
popd
occlum build occlum build
echo -e "\nBuild done. Running fish script ..."
occlum run /bin/fish /fish_script.sh