You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sd...@apache.org on 2022/09/28 10:57:35 UTC

[ignite-3] branch main updated: IGNITE-17495 Form zip layout and add start script (#1106)

This is an automated email from the ASF dual-hosted git repository.

sdanilov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new a5cb1a691a IGNITE-17495 Form zip layout and add start script (#1106)
a5cb1a691a is described below

commit a5cb1a691a8f32d4cf99880d9e3f54fdfacb541b
Author: Aleksandr <ap...@gmail.com>
AuthorDate: Wed Sep 28 18:57:30 2022 +0800

    IGNITE-17495 Form zip layout and add start script (#1106)
---
 assembly/README.md                                 |  26 +++--
 deliveries/deb/build.sh                            |  33 ------
 modules/cli/build.gradle                           |  37 ++++---
 modules/storage-api/build.gradle                   |   1 +
 .../index/AbstractSortedIndexStorageTest.java      |   0
 .../internal/storage/index/impl/TestIndexRow.java  |   0
 packaging/build.gradle                             | 120 +++++++++++++++++++++
 packaging/config/ignite-config.conf                |  11 ++
 .../config/ignite.java.util.logging.properties     |  45 ++++++++
 packaging/deb/build.sh                             |  34 ++++++
 {deliveries => packaging}/deb/changelog            |   0
 {deliveries => packaging}/deb/control              |   0
 {deliveries => packaging}/deb/copyright            |   0
 {deliveries => packaging}/deb/rules                |   0
 {deliveries => packaging}/rpm/.gitignore           |   0
 {deliveries => packaging}/rpm/Dockerfile           |   0
 {deliveries => packaging}/rpm/README.md            |   0
 {deliveries => packaging}/rpm/apache-ignite.spec   |   0
 {deliveries => packaging}/rpm/build.sh             |  31 +++---
 packaging/scripts/bootstrap-config                 |  10 ++
 packaging/scripts/ignite3-db.sh                    |  78 ++++++++++++++
 parent/pom.xml                                     |  37 ++++---
 settings.gradle                                    |   2 +
 23 files changed, 376 insertions(+), 89 deletions(-)

diff --git a/assembly/README.md b/assembly/README.md
index cfe10191da..430c36bc4c 100644
--- a/assembly/README.md
+++ b/assembly/README.md
@@ -16,21 +16,21 @@ The current alpha version includes the following features:
 
 ## Installation
 
-1. Download Ignite 3 Alpha 5:
+1. Download Ignite 3 Beta 1:
    ```
-   curl -L "https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=ignite/3.0.0-alpha5/apache-ignite-3.0.0-alpha5.zip" -o apache-ignite-3.0.0-alpha5.zip
+   curl -L "https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=ignite/3.0.0-beta1/ignite3-3.0.0-beta1.zip" -o ignite3-3.0.0-beta1.zip
    ```
 2. Unzip the downloaded file:
    ```
-   unzip apache-ignite-3.0.0-alpha5.zip && cd apache-ignite-3.0.0-alpha5
+   unzip ignite3-3.0.0-beta1.zip && cd ignite3-db-3.0.0-beta1
    ```
 3. Add your installation directory to the PATH environment variable:
    ```
-   echo 'export IGNITE_HOME="'`pwd`'"' >> ~/.bash_profile && echo 'export PATH="$IGNITE_HOME:$PATH"' >> ~/.bash_profile && source ~/.bash_profile
+   export IGNITE_HOME=$(pwd)
    ```
 4. (optional) If you start the cluster locally then install the core artifacts:
    ```
-   ignite bootstrap
+   sh $IGNITE_HOME/bin/ignite3-db.sh start
    ```
 
 ## Running Examples
@@ -48,15 +48,21 @@ The following examples are included:
 
 To run any other example, do the following:
 1. Import the examples project into your IDE.
-2. Start a server node using the CLI tool:
+2. Start a server node using the startup script:
    ```
-   ignite node start --config=$IGNITE_HOME/examples/config/ignite-config.json my-first-node
+   sh $IGNITE_HOME/bin/ignite3-db start
    ```
-3. (optional) If the cluster is not initialized then initialize the cluster:
+3. (optional) Setup ignite3-cli in your terminal:
+```
+   cd  ignite3-cli-3.0.0-beta1
+   alias ignite="$(pwd)/bin/ignite3-cli" >> ~/.bash_profile
+   source bin/ignite_completion.sh 
+```
+4. (optional) If the cluster is not initialized then initialize the cluster:
    ```
-   ignite cluster init --cluster-name=ignite-cluster --node-endpoint=localhost:10300 --meta-storage-node=my-first-node
+   ignite cluster init --cluster-name=ignite-cluster --cluster-endpoint-url=http://localhost:10300 --meta-storage-node=defauldNode
    ```
-4. Run the preferred example in the IDE.
+5. Run the preferred example in the IDE.
 
 ## Using CLI
 
diff --git a/deliveries/deb/build.sh b/deliveries/deb/build.sh
deleted file mode 100644
index 98a3eeb3b7..0000000000
--- a/deliveries/deb/build.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env bash
-set -o nounset; set -o errexit; set -o pipefail; set -o errtrace; set -o functrace
-
-
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  See the NOTICE file distributed with
-#  this work for additional information regarding copyright ownership.
-#  The ASF licenses this file to You under the Apache License, Version 2.0
-#  (the "License"); you may not use this file except in compliance with
-#  the License.  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-
-## VARS ##
-SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
-PATH__RPM="${1}"
-FILE__RPM=$(basename "${PATH__RPM}")
-
-
-## START ##
-cd "${SCRIPT_DIR}"
-mv -fv "${PATH__RPM}" ./
-alien --scripts --verbose --keep-version --single "${FILE__RPM}"
-rm -rf "${FILE__RPM}"
-cd apache-ignite-*
-fakeroot debian/rules binary
diff --git a/modules/cli/build.gradle b/modules/cli/build.gradle
index 1b98d96cdf..73f3ffce0c 100644
--- a/modules/cli/build.gradle
+++ b/modules/cli/build.gradle
@@ -20,7 +20,6 @@ import org.openapitools.generator.gradle.plugin.tasks.GenerateTask
 plugins {
     alias(libs.plugins.openapiGenerator)
     id 'idea'
-    id 'application'
 }
 
 apply from: "$rootDir/buildscripts/java-core.gradle"
@@ -122,6 +121,18 @@ task generateApiClient(type: GenerateTask) {
 
 generateApiClient.dependsOn copyOpenapiDefinition
 
+idea.module {
+    sourceDirs += generatedClientDir.get().dir('src/main/java').asFile
+    resourceDirs += generatedClientDir.get().dir('src/main/resources').asFile
+    generatedSourceDirs += generatedClientDir.get().dir('src/main/java').asFile
+    resourceDirs += sourceSets.main.output.resourcesDir
+}
+
+compileJava {
+    dependsOn generateApiClient
+    source generatedClientDir.get().dir('src/main/java')
+}
+
 task generateAutocompletionScript(type: JavaExec) {
     classpath = sourceSets.main.runtimeClasspath
     mainClass.set("picocli.AutoComplete")
@@ -131,23 +142,21 @@ task generateAutocompletionScript(type: JavaExec) {
             "${buildDir}/ignite_completion.sh",
             "-n",
             "ignite",
-            "org.apache.ignite.cli.commands.TopLevelCliCommand"]
+            "org.apache.ignite.internal.cli.commands.TopLevelCliCommand"]
+    outputs.file "${buildDir}/ignite_completion.sh"
 }
 
 build.dependsOn generateAutocompletionScript
 
-application {
-    mainClass = 'org.apache.ignite.cli.Main'
+configurations {
+    cliScripts {
+        canBeConsumed = true
+        canBeResolved = false
+    }
 }
 
-idea.module {
-    sourceDirs += generatedClientDir.get().dir('src/main/java').asFile
-    resourceDirs += generatedClientDir.get().dir('src/main/resources').asFile
-    generatedSourceDirs += generatedClientDir.get().dir('src/main/java').asFile
-    resourceDirs += sourceSets.main.output.resourcesDir
-}
-
-compileJava {
-    dependsOn generateApiClient
-    source generatedClientDir.get().dir('src/main/java')
+artifacts {
+    cliScripts(new File("${buildDir}/ignite_completion.sh")) {
+        builtBy(generateAutocompletionScript)
+    }
 }
diff --git a/modules/storage-api/build.gradle b/modules/storage-api/build.gradle
index 02e0cc71e6..4c6d89f45a 100644
--- a/modules/storage-api/build.gradle
+++ b/modules/storage-api/build.gradle
@@ -50,6 +50,7 @@ dependencies {
     testFixturesImplementation libs.hamcrest.core
     testFixturesImplementation libs.junit5.api
     testFixturesImplementation libs.junit5.impl
+    testFixturesImplementation libs.junit5.params
 }
 
 description = 'ignite-storage-api'
diff --git a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
similarity index 100%
rename from modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
rename to modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
diff --git a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/impl/TestIndexRow.java b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/impl/TestIndexRow.java
similarity index 100%
rename from modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/impl/TestIndexRow.java
rename to modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/impl/TestIndexRow.java
diff --git a/packaging/build.gradle b/packaging/build.gradle
new file mode 100644
index 0000000000..076aa632f0
--- /dev/null
+++ b/packaging/build.gradle
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+plugins {
+    id 'java'
+    id 'application'
+}
+
+configurations {
+    dbArtifacts
+    cliArtifacts
+    cliScripts
+}
+
+dependencies {
+    dbArtifacts(project(':ignite-runner'))
+    cliArtifacts(project(':ignite-cli'))
+    cliScripts(project(path: ':ignite-cli', configuration: 'cliScripts'))
+}
+
+// task that generates start script for cli
+task cliStartScript(type: CreateStartScripts) {
+    // will be passed to exec "java ... <mainClassName>"
+    mainClassName = "org.apache.ignite.internal.cli.Main"
+    // forms a classpath string that will be passed to exec "java -cp <classpath> .."
+    // it is expected to locate the "lib" dir together with "bin"
+    classpath = files(new File("../lib/${project(':ignite-cli').name}-${project(':ignite-cli').version}.jar"), new File("../lib/*"))
+    outputDir = startScripts.outputDir
+    applicationName = 'ignite3-cli'
+}
+
+distributions {
+    db {
+        startScripts.enabled = false
+        distributionBaseName = 'ignite3-db'
+        contents {
+            // create empty dirs that are required to start Ignite
+            into('') {
+                File.createTempDir().with {
+                    ["log", "etc", "work"].each {new File(absolutePath, it).mkdirs() }
+                    from (absolutePath) {
+                        includeEmptyDirs = true
+                    }
+                }
+            }
+            into('') {
+                from ("$rootDir/LICENSE")
+                from ("$rootDir/NOTICE")
+                from ("$rootDir/assembly/README.md")
+            }
+            into('etc') {
+                from ("$rootDir/packaging/scripts/bootstrap-config")
+                from ("$rootDir/packaging/config/ignite-config.conf")
+                from ("$rootDir/packaging/config/ignite.java.util.logging.properties")
+            }
+            into('bin') {
+                fileMode 0755
+                from ("$rootDir/packaging/scripts/ignite3-db.sh")
+            }
+            into('lib') {
+                from(configurations.dbArtifacts)
+            }
+        }
+    }
+
+    cli {
+        startScripts.applicationName ='ignite3-cli'
+        distributionBaseName = 'ignite3-cli'
+        contents {
+            into('') {
+                File.createTempDir().with {
+                    ["log"].each {new File(absolutePath, it).mkdirs() }
+                    from (absolutePath) {
+                        includeEmptyDirs = true
+                    }
+                }
+            }
+            into('') {
+                from ("$rootDir/LICENSE")
+                from ("$rootDir/NOTICE")
+                from ("$rootDir/assembly/README.md")
+            }
+            into('bin') {
+                duplicatesStrategy= DuplicatesStrategy.EXCLUDE
+                from(configurations.cliScripts)
+                from(cliStartScript)
+                fileMode = 0755
+            }
+            into('lib') {
+                from(configurations.cliArtifacts)
+            }
+        }
+    }
+}
+
+
+// create an uber zip with all distributions
+task allDistZip(type: Zip) {
+    archiveBaseName = "ignite3"
+    def allZipFiles = cliDistZip.outputs.files + dbDistZip.outputs.files
+    allZipFiles.each {
+        from(zipTree(it))
+    }
+}
+
+allDistZip.dependsOn cliDistZip, dbDistZip
diff --git a/packaging/config/ignite-config.conf b/packaging/config/ignite-config.conf
new file mode 100644
index 0000000000..be7adb998f
--- /dev/null
+++ b/packaging/config/ignite-config.conf
@@ -0,0 +1,11 @@
+{
+    network: {
+        port: 3344,
+        portRange: 10,
+        nodeFinder: {
+            netClusterNodes: [
+                "localhost:3344"
+            ]
+        }
+    }
+}
diff --git a/packaging/config/ignite.java.util.logging.properties b/packaging/config/ignite.java.util.logging.properties
new file mode 100644
index 0000000000..312b25682e
--- /dev/null
+++ b/packaging/config/ignite.java.util.logging.properties
@@ -0,0 +1,45 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#########################################################################
+#       Default java.util.logging configuration for Ignite instance.
+#
+# To use another config file use `java.util.logging.config.file` system
+# property. For example `java -Djava.util.logging.config.file=myfile`
+#########################################################################
+
+#
+# Comma-separated list of logging "handlers". Note that some of them may be
+# reconfigured (or even removed) at runtime according to system properties.
+handlers=java.util.logging.ConsoleHandler
+
+#
+# Default global logging level.
+# This specifies which kinds of events are logged across all loggers.
+# For any given category this global level can be overridden by a category
+# specific level.
+# Note that handlers also have a separate level setting to limit messages
+# printed through it.
+#
+.level=INFO
+
+# Console handler logs all messages with importance level `INFO` and above
+# into standard error stream (`System.err`).
+#
+java.util.logging.ConsoleHandler.formatter = org.apache.ignite.lang.JavaLoggerFormatter
+java.util.logging.ConsoleHandler.level = INFO
+java.util.logging.ConsoleHandler.encoding = UTF-8
diff --git a/packaging/deb/build.sh b/packaging/deb/build.sh
new file mode 100644
index 0000000000..8fdb08c459
--- /dev/null
+++ b/packaging/deb/build.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -o nounset; set -o errexit; set -o pipefail; set -o errtrace; set -o functrace
+
+
+## VARS ##
+SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
+PATH__RPM="${1}"
+FILE__RPM=$(basename "${PATH__RPM}")
+
+
+## START ##
+cd "${SCRIPT_DIR}"
+mv -fv "${PATH__RPM}" ./
+alien --scripts --verbose --keep-version --single "${FILE__RPM}"
+rm -rf "${FILE__RPM}"
+cd apache-ignite-*
+fakeroot debian/rules binary
diff --git a/deliveries/deb/changelog b/packaging/deb/changelog
similarity index 100%
rename from deliveries/deb/changelog
rename to packaging/deb/changelog
diff --git a/deliveries/deb/control b/packaging/deb/control
similarity index 100%
rename from deliveries/deb/control
rename to packaging/deb/control
diff --git a/deliveries/deb/copyright b/packaging/deb/copyright
similarity index 100%
rename from deliveries/deb/copyright
rename to packaging/deb/copyright
diff --git a/deliveries/deb/rules b/packaging/deb/rules
similarity index 100%
rename from deliveries/deb/rules
rename to packaging/deb/rules
diff --git a/deliveries/rpm/.gitignore b/packaging/rpm/.gitignore
similarity index 100%
rename from deliveries/rpm/.gitignore
rename to packaging/rpm/.gitignore
diff --git a/deliveries/rpm/Dockerfile b/packaging/rpm/Dockerfile
similarity index 100%
rename from deliveries/rpm/Dockerfile
rename to packaging/rpm/Dockerfile
diff --git a/deliveries/rpm/README.md b/packaging/rpm/README.md
similarity index 100%
rename from deliveries/rpm/README.md
rename to packaging/rpm/README.md
diff --git a/deliveries/rpm/apache-ignite.spec b/packaging/rpm/apache-ignite.spec
similarity index 100%
rename from deliveries/rpm/apache-ignite.spec
rename to packaging/rpm/apache-ignite.spec
diff --git a/deliveries/rpm/build.sh b/packaging/rpm/build.sh
similarity index 52%
rename from deliveries/rpm/build.sh
rename to packaging/rpm/build.sh
index eb798e768b..f4e8d11c62 100644
--- a/deliveries/rpm/build.sh
+++ b/packaging/rpm/build.sh
@@ -1,21 +1,22 @@
 #!/usr/bin/env bash
-set -o nounset; set -o errexit; set -o pipefail; set -o errtrace; set -o functrace
-
-
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  See the NOTICE file distributed with
-#  this work for additional information regarding copyright ownership.
-#  The ASF licenses this file to You under the Apache License, Version 2.0
-#  (the "License"); you may not use this file except in compliance with
-#  the License.  You may obtain a copy of the License at
 #
-#       http://www.apache.org/licenses/LICENSE-2.0
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
 #
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -o nounset; set -o errexit; set -o pipefail; set -o errtrace; set -o functrace
 
 
 ## VARS ##
diff --git a/packaging/scripts/bootstrap-config b/packaging/scripts/bootstrap-config
new file mode 100644
index 0000000000..e9030c15f2
--- /dev/null
+++ b/packaging/scripts/bootstrap-config
@@ -0,0 +1,10 @@
+NODE_NAME=defaultNode
+
+WORK_PATH=$IGNITE_HOME/work
+LOGS_PATH=$IGNITE_HOME/log
+LIBS_PATH=$IGNITE_HOME/lib
+BIN_PATH=$IGNITE_HOME/bin
+CONFIG_PATH=$IGNITE_HOME/etc
+
+IGNITE_CONFIG_FILE=$CONFIG_PATH/ignite-config.conf
+LOG_OUT_FILE=$LOGS_PATH/${NODE_NAME}.log
diff --git a/packaging/scripts/ignite3-db.sh b/packaging/scripts/ignite3-db.sh
new file mode 100755
index 0000000000..ee59b1f5f3
--- /dev/null
+++ b/packaging/scripts/ignite3-db.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+############# STAGE 1: SETUP ENV ###############
+
+  # LOAD VARIABLES
+  if [ -z ${IGNITE_HOME+x} ]; then IGNITE_HOME=$(pwd); fi
+
+  . $IGNITE_HOME/etc/bootstrap-config
+
+
+
+start() {
+
+  ############# STAGE 2: BUILD CMD ###############
+
+  # FORM A START COMMAND
+  CMD="java \
+  --add-opens java.base/java.lang=ALL-UNNAMED \
+  --add-opens java.base/java.lang.invoke=ALL-UNNAMED \
+  --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
+  --add-opens java.base/java.io=ALL-UNNAMED \
+  --add-opens java.base/java.nio=ALL-UNNAMED \
+  --add-opens java.base/java.math=ALL-UNNAMED \
+  --add-opens java.base/java.util=ALL-UNNAMED \
+  --add-opens java.base/jdk.internal.misc=ALL-UNNAMED \
+  -Dio.netty.tryReflectionSetAccessible=true \
+  -Djava.util.logging.config.file=$CONFIG_PATH/ignite.java.util.logging.properties \
+  -classpath $LIBS_PATH/ignite-runner.jar:$LIBS_PATH/* org.apache.ignite.app.IgniteCliRunner \
+  --config-path $IGNITE_CONFIG_FILE \
+  --work-dir $WORK_PATH \
+  $NODE_NAME"
+
+  ############# STAGE 3: RUN CMD, REPORT ###############
+  exec ${CMD} >>${LOG_OUT_FILE:-/dev/null} 2>&1 < /dev/null & jobs -p > ${IGNITE_HOME}/pid
+
+  # TODO: SAVE PROCESS PID AND LINK IT WITH THE NODE NAME
+  # TODO: WAIT FOR NODE IS STARTED
+  # TODO: REPORT SUCCESS OR FAILURE
+  # TODO: SHOW HOW TO CONNECT TO THE STARTED NODE
+}
+
+stop() {
+  kill -9 "$(cat ${IGNITE_HOME}/pid)"
+}
+
+case $1 in
+	start)
+    start
+		;;
+	stop)
+    stop
+		;;
+	restart)
+		stop
+		start
+		;;
+	*)
+		echo "Unknown command '$1', available commands: start, stop, restart"
+		exit 1
+		;;
+  esac
diff --git a/parent/pom.xml b/parent/pom.xml
index 78b7ca25da..4854d0361f 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -1,19 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-       http://www.apache.org/licenses/LICENSE-2.0
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements. See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License. You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 
 <project
         xmlns="http://maven.apache.org/POM/4.0.0"
@@ -1547,11 +1549,11 @@
                             <licenseFamilyName>Ignite Apache License 2.0</licenseFamilyName>
                             <fullText>
                                 Licensed to the Apache Software Foundation (ASF) under one or more
-                                contributor license agreements.  See the NOTICE file distributed with
+                                contributor license agreements. See the NOTICE file distributed with
                                 this work for additional information regarding copyright ownership.
                                 The ASF licenses this file to You under the Apache License, Version 2.0
                                 (the "License"); you may not use this file except in compliance with
-                                the License.  You may obtain a copy of the License at
+                                the License. You may obtain a copy of the License at
 
                                 http://www.apache.org/licenses/LICENSE-2.0
 
@@ -1593,8 +1595,9 @@
                         <exclude>modules/raft/src/main/java/org/apache/ignite/raft/jraft/util/timer/Timeout.java</exclude> <!-- Netty license. -->
                         <exclude>**/*.sln</exclude> <!-- Visual Studio solution. -->
                         <!-- DEB package assembly files -->
-                        <exclude>deliveries/deb/rules</exclude>
-                        <exclude>deliveries/deb/control</exclude>
+                        <exclude>packaging/deb/rules</exclude>
+                        <exclude>packaging/deb/control</exclude>
+                        <exclude>packaging/scripts/bootstrap-config</exclude>
                         <exclude>**/*.bat</exclude> <!-- Files in bat format -->
                         <exclude>**/*.ini</exclude> <!-- Files in ini format -->
                         <exclude>modules/runner/src/integrationTest/sql/**</exclude> <!-- SQL logic tests. -->
diff --git a/settings.gradle b/settings.gradle
index cb2a6460d5..d1de2d5faa 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -61,6 +61,7 @@ include(':ignite-compute')
 include(':ignite-metrics')
 include(':ignite-binary-tuple')
 include(':platforms')
+include(':packaging')
 
 project(":ignite-examples").projectDir = file('examples')
 project(":ignite-page-memory").projectDir = file('modules/page-memory')
@@ -107,3 +108,4 @@ project(":ignite-compute").projectDir = file('modules/compute')
 project(":ignite-metrics").projectDir = file('modules/metrics')
 project(":ignite-binary-tuple").projectDir = file('modules/binary-tuple')
 project(":platforms").projectDir = file('modules/platforms')
+project(":packaging").projectDir = file('packaging')