From: Waldemar Kozaczuk <jwkozac...@gmail.com>
Committer: Waldemar Kozaczuk <jwkozac...@gmail.com>
Branch: master

scripts/build-capstan-mpm-packages: enhance to build custom kernels

This patch enhances scripts/build-capstan-mpm-packages to allow building
custom kernels like in this example:

./scripts/build-capstan-mpm-packages kernel conf_hide_symbols=1 fs=rofs 
drivers_profile=microvm loader_image=osv-loader-microvm

In essence all extra parameters passed to script that are either
conf_*=*, fs=* or drivers_profile=* as relayed as is and passed to the
script/build downstream.

In addition one can specify the capstan image name by using the
parameter loader_image.

Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>

---
diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -44,21 +44,29 @@ jobs:
         - docker exec build ./scripts/osv-version.sh > /tmp/osv-version
         - export ARTIFACTS_DIR="$(mktemp -d)"
         - cp /tmp/osv-version "$ARTIFACTS_DIR"
-        - docker cp build:/root/.capstan/repository/osv-loader/osv-loader.qemu 
"$ARTIFACTS_DIR"
-        - gzip "$ARTIFACTS_DIR"/osv-loader.qemu
-        - docker cp build:/git-repos/osv/build/release/loader-stripped.elf 
"$ARTIFACTS_DIR"/loader.elf
-        - gzip "$ARTIFACTS_DIR"/loader.elf
+        - docker cp 
build:/root/.capstan/repository/osv-loader/osv-loader.qemu.x86_64 
"$ARTIFACTS_DIR"/osv-loader-with-zfs.qemu.x86_64
+        - gzip "$ARTIFACTS_DIR"/osv-loader-with-zfs.qemu.x86_64
+        - docker cp build:/git-repos/osv/build/release/loader-stripped.elf 
"$ARTIFACTS_DIR"/loader-with-zfs.elf.x86_64
+        - gzip "$ARTIFACTS_DIR"/loader-with-zfs.elf.x86_64
         - docker cp build:/root/.capstan/repository/osv-loader/index.yaml 
"$ARTIFACTS_DIR"
-        - docker cp build:/root/.capstan/packages/osv.bootstrap.mpm 
"$ARTIFACTS_DIR"
+        - docker cp build:/root/.capstan/packages/osv.zfs.mpm.x86_64 
"$ARTIFACTS_DIR"
+        - docker cp build:/root/.capstan/packages/osv.zfs.yaml "$ARTIFACTS_DIR"
+        - docker cp build:/root/.capstan/packages/osv.bootstrap.mpm.x86_64 
"$ARTIFACTS_DIR"
         - docker cp build:/root/.capstan/packages/osv.bootstrap.yaml 
"$ARTIFACTS_DIR"
-        - docker cp build:/root/.capstan/packages/osv.common-tests.mpm 
"$ARTIFACTS_DIR"
+        - docker cp build:/root/.capstan/packages/osv.common-tests.mpm.x86_64 
"$ARTIFACTS_DIR"
         - docker cp build:/root/.capstan/packages/osv.common-tests.yaml 
"$ARTIFACTS_DIR"
-        - docker cp build:/root/.capstan/packages/osv.zfs-tests.mpm 
"$ARTIFACTS_DIR"
+        - docker cp build:/root/.capstan/packages/osv.zfs-tests.mpm.x86_64 
"$ARTIFACTS_DIR"
         - docker cp build:/root/.capstan/packages/osv.zfs-tests.yaml 
"$ARTIFACTS_DIR"
-        - docker cp build:/root/.capstan/packages/osv.rofs-tests.mpm 
"$ARTIFACTS_DIR"
+        - docker cp build:/root/.capstan/packages/osv.rofs-tests.mpm.x86_64 
"$ARTIFACTS_DIR"
         - docker cp build:/root/.capstan/packages/osv.rofs-tests.yaml 
"$ARTIFACTS_DIR"
-        - docker cp 
build:/root/.capstan/packages/osv.httpserver-monitoring-api.mpm "$ARTIFACTS_DIR"
+        - docker cp 
build:/root/.capstan/packages/osv.httpserver-monitoring-api.mpm.x86_64 
"$ARTIFACTS_DIR"
         - docker cp 
build:/root/.capstan/packages/osv.httpserver-monitoring-api.yaml 
"$ARTIFACTS_DIR"
+        - docker exec rm -rf ./build/release.x64
+        - docker exec build ./scripts/build-capstan-mpm-packages kernel 
conf_hide_symbols=1 fs=rofs loader_image=osv-loader-hidden
+        - docker cp 
build:/root/.capstan/repository/osv-loader-hidden/osv-loader-hidden.qemu.x86_64 
"$ARTIFACTS_DIR"/osv-loader-hidden.qemu.x86_64
+        - gzip "$ARTIFACTS_DIR"/osv-loader-hidden.qemu.x86_64
+        - docker cp build:/git-repos/osv/build/release/loader-stripped.elf 
"$ARTIFACTS_DIR"/loader-hidden.elf.x86_64
+        - gzip "$ARTIFACTS_DIR"/loader-hidden.elf.x86_64
         - ./.travis/cirp/cleanup4.sh
         - ./.travis/cirp/publish.sh "$ARTIFACTS_DIR" $(cat /tmp/osv-version)
         - ./.travis/cirp/cleanup5.sh
diff --git a/scripts/build-capstan-mpm-packages 
b/scripts/build-capstan-mpm-packages
--- a/scripts/build-capstan-mpm-packages
+++ b/scripts/build-capstan-mpm-packages
@@ -20,7 +20,12 @@
 # at $HOME/.capstan/packages.
 #
 # The script accepts two types of the arguments - name of an OSv app or module 
found under OSv
-# apps or modules subdirectory or name of predefined set of standard packages.
+# apps or modules subdirectory OR name of predefined set of standard packages. 
This argument
+# must be passed as the very first one.
+#
+# In addition the script also accepts various kernel build configuration 
parameters
+# like 'conf_*=*', 'fs=*' and 'drivers_profile=*' as well as name of the 
capstan OSv loader
+# image 'loader_image=*' which defaults to 'osv-loader'.
 #
 # If an app or module name passed in, the script does following:
 # 1. Calls ./script/build with appropriate arguments to build and export 
corresponding
@@ -42,6 +47,21 @@ then
   exit 1
 fi
 
+machine=$(uname -m)
+loader_image="osv-loader"
+
+# Let us collect the kernel configuration parameters like conf_*=*, 
drivers_profile=*, fs=* and loader_image=*
+declare -a kernel_conf_args
+for arg in $*
+do
+  if [[ "$arg" =~ ^conf_.* ]] || [[ "$arg" =~ ^drivers_profile=.* ]] || [[ 
"$arg" =~ ^fs=.* ]]; then
+    kernel_conf_args+=("$arg")
+  elif [[ "$arg" =~ ^loader_image=.* ]]; then
+    loader_image=${arg:13}
+  fi
+done
+echo "Loader_image=[$loader_image]"
+
 OSV_ROOT=$(realpath "$(dirname $0)/..")
 OSV_BUILD=$OSV_ROOT/build/release
 
@@ -72,10 +92,10 @@ build_osv_image() {
 
   echo "-------------------------------------"
   echo "- Building OSv image: "
-  echo "  ./scripts/build -j4 image=$image export=$export_mode 
usrskel=$usrskel"
+  echo "  ./scripts/build -j$(nproc) image=$image export=$export_mode 
usrskel=$usrskel ${kernel_conf_args[@]}"
   echo "-------------------------------------"
 
-  cd "$OSV_ROOT" && ./scripts/build -j4 image="$image" export="$export_mode" 
usrskel="$usrskel"
+  cd "$OSV_ROOT" && ./scripts/build -j$(nproc) image="$image" 
export="$export_mode" usrskel="$usrskel" "${kernel_conf_args[@]}"
 
   RET_VAL=$?
   if [[ "$RET_VAL" -ne 0 ]]; then
@@ -178,7 +198,12 @@ build_package() {
   cp -a $OSV_ROOT/build/export/. $package_dir
 
   cd $package_dir && $CAPSTAN package build
-  mv $package_dir/*.mpm $OUTPUT
+  for mpm in $package_dir/*.mpm
+  do
+    local mpm_filename=$(basename $mpm)
+    mv $mpm $OUTPUT/$mpm_filename.$machine
+    ln -s $mpm_filename.$machine $OUTPUT/$mpm_filename
+  done
 
   echo "-------------------------------------"
   echo "- Built package $app_or_module_name"
@@ -226,25 +251,30 @@ build_osv_image_loader_and_bootstrap_package() {
   # Build osv.loader and files that will make up bootstrap package
   build_osv_image empty all default
 
-  #Copy loader.img as osv-loader.qemu
-  mkdir -p $CAPSTAN_LOCAL_REPO/repository/osv-loader/
-  cp -a $OSV_BUILD/loader.img 
$CAPSTAN_LOCAL_REPO/repository/osv-loader/osv-loader.qemu
+  #Copy loader.img as $loader_image.qemu
+  mkdir -p $CAPSTAN_LOCAL_REPO/repository/$loader_image/
+  cp -a $OSV_BUILD/loader.img 
$CAPSTAN_LOCAL_REPO/repository/$loader_image/$loader_image.qemu.$machine
+  ln -s $loader_image.qemu.$machine 
$CAPSTAN_LOCAL_REPO/repository/$loader_image/$loader_image.qemu
+  #Copy loader.elf
+  cp -a $OSV_BUILD/loader-stripped.elf 
$CAPSTAN_LOCAL_REPO/repository/$loader_image/$loader_image.elf.$machine
+  ln -s $loader_image.elf.$machine 
$CAPSTAN_LOCAL_REPO/repository/$loader_image/$loader_image.elf
+
   determine_platform
-  cat << EOF > $CAPSTAN_LOCAL_REPO/repository/osv-loader/index.yaml
+  cat << EOF > $CAPSTAN_LOCAL_REPO/repository/$loader_image/index.yaml
 format_version: "1"
 version: "$OSV_VERSION"
 created: $(date +'%Y-%m-%d %H:%M')
-description: "OSv kernel"
+description: "OSv kernel - $loader_image"
 platform: "$PLATFORM"
 EOF
-  #Copy loader.elf
-  mkdir -p $CAPSTAN_LOCAL_REPO/repository/osv-kernel/
-  cp -a $OSV_BUILD/loader-stripped.elf 
$CAPSTAN_LOCAL_REPO/repository/osv-kernel/osv-kernel.elf
-  cp $CAPSTAN_LOCAL_REPO/repository/osv-loader/index.yaml 
$CAPSTAN_LOCAL_REPO/repository/osv-kernel/index.yaml
-
   # Create bootstrap package
   prepare_package empty
   build_package empty
+
+  # Create ZFS library package
+  build_osv_image zfs selected none
+  prepare_package zfs
+  build_package zfs
 }
 
 build_httpserver_api_package() {
@@ -276,16 +306,16 @@ build_unit_tests_package() {
   #First build common tests
   build_osv_image 
"java-base,java-non-isolated,java-cmd,java-tests,tests,dl_tests,libz" selected 
none fs=zfs
   cp "$OSV_ROOT/modules/tests/common.manifest" 
"$OSV_ROOT/build/release/append.manifest"
-  cd "$OSV_ROOT" && ./scripts/build -j4 
image="java-base,java-non-isolated,java-cmd,java-tests,dl_tests,libz" 
export=selected usrskel=none --append-manifest
+  cd "$OSV_ROOT" && ./scripts/build -j$(nproc) 
image="java-base,java-non-isolated,java-cmd,java-tests,dl_tests,libz" 
export=selected usrskel=none --append-manifest
   build_mpm "common-tests"
   #Build ZFS tests
   cp "$OSV_ROOT/modules/tests/fs.manifest" 
"$OSV_ROOT/build/release/append.manifest"
-  cd "$OSV_ROOT" && ./scripts/build -j4 image="empty" export=selected 
usrskel=none --append-manifest
+  cd "$OSV_ROOT" && ./scripts/build -j$(nproc) image="empty" export=selected 
usrskel=none --append-manifest
   build_mpm "zfs-tests"
   #Build ROFS tests
-  cd "$OSV_ROOT" && ./scripts/build -j4 image="tests" export=selected 
usrskel=none fs=rofs
+  cd "$OSV_ROOT" && ./scripts/build -j$(nproc) image="tests" export=selected 
usrskel=none fs=rofs
   cp "$OSV_ROOT/modules/tests/fs.manifest" 
"$OSV_ROOT/build/release/append.manifest"
-  cd "$OSV_ROOT" && ./scripts/build -j4 image="empty" export=selected 
usrskel=none --append-manifest
+  cd "$OSV_ROOT" && ./scripts/build -j$(nproc) image="empty" export=selected 
usrskel=none --append-manifest
   build_mpm "rofs-tests"
 }
 

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/00000000000074eb3005f0db5ef0%40google.com.

Reply via email to