diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9adc7e5971..02a064ec9d 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -338,6 +338,7 @@ jobs:
           GITHUB_HUNTER_USERNAME=${{ secrets.HUNTER_USERNAME }} \
           GITHUB_HUNTER_TOKEN=${{ secrets.HUNTER_TOKEN }} \
           BUILDER_IMAGE_TAG=${{ env.BUILDER_LATEST_TAG }} \
+          GIT_REF_NAME=${{ env.GIT_REF_NAME }} \
           BUILD_TYPE=${{ matrix.options.build_type }}
 
       - name: "Push Kagome APT Package"
diff --git a/README.md b/README.md
index ab7b296a8b..ee81dffe57 100644
--- a/README.md
+++ b/README.md
@@ -121,6 +121,33 @@ make debug_docker
 make clear
 ```
 
+### Installation from APT Package
+
+To install KAGOME releases using the provided package repository, follow these steps (tested on Ubuntu 24.04.1 LTS (Noble Numbat)):
+
+Update your package lists and install necessary utilities:
+    
+```sh
+apt update && apt install -y gpg curl
+```
+
+Add the repository’s GPG signing key:
+    
+```sh
+curl -fsSL https://europe-north1-apt.pkg.dev/doc/repo-signing-key.gpg | gpg --dearmor -o /usr/share/keyrings/europe-north-1-apt-archive-keyring.gpg
+```
+
+Add the KAGOME package repository to your sources list:
+```sh
+echo "deb [signed-by=/usr/share/keyrings/europe-north-1-apt-archive-keyring.gpg] https://europe-north1-apt.pkg.dev/projects/kagome-408211 kagome main" > /etc/apt/sources.list.d/kagome.list
+```
+
+Update the package lists and install KAGOME:
+
+```sh
+apt update && apt install -y kagome
+```
+
 ### Using KAGOME
 
 #### Obtaining database snapshot (optional)
diff --git a/get_version.sh b/get_version.sh
index 64ac9f12e4..107230db57 100755
--- a/get_version.sh
+++ b/get_version.sh
@@ -5,6 +5,10 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
+sanitize_version() {
+  echo "$1" | sed -E 's/[^a-zA-Z0-9.+~:-]/-/g'
+}
+
 realpath() {
   if [ -d "$1" ]; then
     cd "$1" && pwd
@@ -13,26 +17,31 @@ realpath() {
   fi
 }
 
-cd $(dirname "$(realpath "$0")")
+cd "$(dirname "$(realpath "$0")")"
+
+SANITIZED=false
+if [ "$#" -gt 0 ] && [ "$1" = "--sanitized" ]; then
+  SANITIZED=true
+fi
 
 if [ -x "$(which git 2>/dev/null)" ] && [ -e ".git" ]; then
   if [ -x "$(which sed 2>/dev/null)" ]; then
     HEAD=$(git rev-parse --short HEAD)
     COMMON=$(git merge-base HEAD master)
 
-    DESCR=$(git describe --tags --long ${COMMON})
+    DESCR=$(git describe --tags --long "${COMMON}")
     if [ "$DESCR" = "" ]; then
       DESCR=$HEAD-0-g$HEAD
     fi
 
-    TAG_IN_MASTER=$(echo $DESCR | sed -E "s/v?(.*)-([0-9]+)-g[a-f0-9]+/\1/")
-    TAG_TO_FORK_DISTANCE=$(echo $DESCR | sed -E "s/v?(.*)-([0-9]+)-g[a-f0-9]+/\2/")
+    TAG_IN_MASTER=$(echo "$DESCR" | sed -E "s/v?(.*)-([0-9]+)-g[a-f0-9]+/\1/")
+    TAG_TO_FORK_DISTANCE=$(echo "$DESCR" | sed -E "s/v?(.*)-([0-9]+)-g[a-f0-9]+/\2/")
 
     BRANCH=$(git branch --show-current)
     if [ "$BRANCH" = "" ]; then
       BRANCH=$HEAD
     fi
-    FORK_TO_HEAD_DISTANCE=$(git rev-list --count ${COMMON}..HEAD)
+    FORK_TO_HEAD_DISTANCE=$(git rev-list --count "${COMMON}..HEAD")
 
     RESULT=$TAG_IN_MASTER
     if [ "$TAG_TO_FORK_DISTANCE" != "0" ]; then
@@ -52,4 +61,8 @@ else
   RESULT="Unknown(no git)"
 fi
 
-echo $RESULT
+if [ "$SANITIZED" = true ]; then
+  RESULT=$(sanitize_version "$RESULT")
+fi
+
+echo "$RESULT"
\ No newline at end of file
diff --git a/housekeeping/docker/kagome-dev/.gitignore b/housekeeping/docker/kagome-dev/.gitignore
index a27562ecf5..20fe42fd77 100644
--- a/housekeeping/docker/kagome-dev/.gitignore
+++ b/housekeeping/docker/kagome-dev/.gitignore
@@ -1,6 +1,8 @@
 *-versions.txt
+*_version.txt
 commit_hash.txt
 
+
 cumulus
 polkadot
 
diff --git a/housekeeping/docker/kagome-dev/Makefile b/housekeeping/docker/kagome-dev/Makefile
index 2fea5787e2..0c0d985876 100644
--- a/housekeeping/docker/kagome-dev/Makefile
+++ b/housekeeping/docker/kagome-dev/Makefile
@@ -19,15 +19,6 @@ PACKAGE_ARCHITECTURE ?= amd64
 # Debug, Release, RelWithDebInfo
 BUILD_TYPE ?= Release
 
-# Generated versions
-OS_IMAGE ?= $(OS_IMAGE_NAME):$(OS_IMAGE_TAG)@sha256:$(OS_IMAGE_HASH)
-OS_IMAGE_TAG_WITH_HASH := $(OS_IMAGE_TAG)@sha256:$(OS_IMAGE_HASH)
-OS_IMAGE_SHORT_HASH := $(shell echo $(OS_IMAGE_HASH) | cut -c1-7)
-BUILDER_IMAGE_TAG ?= $(OS_IMAGE_SHORT_HASH)_rust$(RUST_VERSION)_gcc$(GCC_VERSION)_llvm$(LLVM_VERSION)
-BUILDER_LATEST_TAG ?= latest
-TESTER_LATEST_TAG ?= latest
-DOCKERHUB_BUILDER_PATH ?= $(DOCKERHUB_REGISTRY_PATH)_builder
-
 # kagome_dev_docker_build Variables
 BUILD_DIR ?= build
 CACHE_DIR := $(shell pwd)/../../../../kagome/$(BUILD_DIR)/cache
@@ -38,12 +29,23 @@ GITHUB_HUNTER_TOKEN ?=
 CTEST_OUTPUT_ON_FAILURE ?= 1
 WERROR ?= OFF
 
+# Generated versions
+OS_IMAGE ?= $(OS_IMAGE_NAME):$(OS_IMAGE_TAG)@sha256:$(OS_IMAGE_HASH)
+OS_IMAGE_TAG_WITH_HASH := $(OS_IMAGE_TAG)@sha256:$(OS_IMAGE_HASH)
+OS_IMAGE_SHORT_HASH := $(shell echo $(OS_IMAGE_HASH) | cut -c1-7)
+BUILDER_IMAGE_TAG ?= $(OS_IMAGE_SHORT_HASH)_rust$(RUST_VERSION)_gcc$(GCC_VERSION)_llvm$(LLVM_VERSION)
+BUILDER_LATEST_TAG ?= latest
+TESTER_LATEST_TAG ?= latest
+DOCKERHUB_BUILDER_PATH ?= $(DOCKERHUB_REGISTRY_PATH)_builder
+KAGOME_SANITIZED_VERSION = $(shell cd $(WORKING_DIR) && ./get_version.sh --sanitized)
+
 # kagome_runtime_cache and kagome_image_build Variables
 KAGOME_PACKAGE_VERSION ?=
 #KAGOME_RUNTIME_PACKAGE_VERSION ?=
 
 # upload_apt_package Variables
 ARTIFACTS_REPO ?= kagome-apt
+PUBLIC_ARTIFACTS_REPO ?= kagome
 REGION ?= europe-north1
 
 # CI Variables
@@ -55,11 +57,11 @@ export DOCKER_BUILDKIT=1
 # BUILDKIT_PROGRESS - auto, plain, tty, rawjson
 export BUILDKIT_PROGRESS=auto
 
-
 get_versions:
 	@echo "full_commit_hash: `git rev-parse HEAD`" | tee commit_hash.txt
 	@echo "short_commit_hash: `git rev-parse HEAD | head -c 7`" | tee -a commit_hash.txt
 	@echo "kagome_version: `cd $(WORKING_DIR) && ./get_version.sh`" | tee kagome_version.txt
+	@echo "kagome_sanitized_version: $(KAGOME_SANITIZED_VERSION)" | tee -a kagome_version.txt
 
 builder_image_tag:
 	@echo $(BUILDER_IMAGE_TAG)
@@ -133,8 +135,17 @@ kagome_dev_docker_build:
 			$(PACKAGE_ARCHITECTURE) \
 			kagome-dev \
 			/tmp/kagome \
-			'Kagome Dev Debian Package' \
-			'$(DEPENDENCIES)' ; \
+			'Kagome Dev Ubuntu Package' \
+			'$(DEPENDENCIES)' && \
+		if [ "$(IS_MAIN_OR_TAG)" = "true" ] && [ "$(GIT_REF_NAME)" != "master" ] && [ "$(BUILD_TYPE)" = "Release" ]; then \
+			./build_apt_package.sh \
+				\"$(KAGOME_SANITIZED_VERSION)-$(BUILD_TYPE)\" \
+				$(PACKAGE_ARCHITECTURE) \
+				kagome \
+				/tmp/kagome \
+				'Kagome Ubuntu Package' \
+				'$(DEPENDENCIES)' ; \
+		fi; \
 		" || DOCKER_EXEC_RESULT=$$? ; \
 	if [ $$DOCKER_EXEC_RESULT -ne 0 ]; then \
 		echo "Error: Docker exec failed with return code $$DOCKER_EXEC_RESULT"; \
@@ -244,7 +255,10 @@ upload_apt_package:
 	SHORT_COMMIT_HASH=$$(grep 'short_commit_hash:' commit_hash.txt | cut -d ' ' -f 2); \
 	gcloud config set artifacts/repository $(ARTIFACTS_REPO); \
 	gcloud config set artifacts/location $(REGION); \
-	gcloud artifacts apt upload $(ARTIFACTS_REPO) --source=./pkg/kagome-dev_$$(date +'%y.%m.%d')-$${SHORT_COMMIT_HASH}-$(BUILD_TYPE)_$(PACKAGE_ARCHITECTURE).deb
+	gcloud artifacts apt upload $(ARTIFACTS_REPO) --source=./pkg/kagome-dev_$$(date +'%y.%m.%d')-$${SHORT_COMMIT_HASH}-$(BUILD_TYPE)_$(PACKAGE_ARCHITECTURE).deb ; \
+	if [ "$(IS_MAIN_OR_TAG)" = "true" ] && [ "$(GIT_REF_NAME)" != "master" ] && [ "$(BUILD_TYPE)" = "Release" ]; then \
+		gcloud artifacts apt upload $(PUBLIC_ARTIFACTS_REPO) --source=./pkg/kagome_$(KAGOME_SANITIZED_VERSION)-$(BUILD_TYPE)_$(PACKAGE_ARCHITECTURE).deb ; \
+	fi;
 
 runtime_cache:
 	CONTAINER_NAME=kagome_dev_runtime_cache_$$(openssl rand -hex 6); \
@@ -274,7 +288,7 @@ runtime_cache:
 			$(PACKAGE_ARCHITECTURE) \
 			kagome-dev-runtime \
 			/tmp/kagome_runtime \
-			'Kagome Runtime Dev Debian Package' \
+			'Kagome Runtime Dev Ubuntu Package' \
 			'kagome-dev' \
 			 /tmp/kagome/runtimes-cache/ ; \
 		" || DOCKER_EXEC_RESULT=$$? ; \
diff --git a/housekeeping/docker/kagome-dev/build_apt_package.sh b/housekeeping/docker/kagome-dev/build_apt_package.sh
index 9b776b904e..11b1666115 100755
--- a/housekeeping/docker/kagome-dev/build_apt_package.sh
+++ b/housekeeping/docker/kagome-dev/build_apt_package.sh
@@ -68,7 +68,7 @@ mkdir -p ./pkg/${DIR_NAME}${BINARY_INSTALL_DIR}
 log "Working directory: $(pwd)/pkg/"
 
 log "Copying artifacts..."
-mv -f ${ARTIFACTS_DIR}/* ./pkg/${DIR_NAME}${BINARY_INSTALL_DIR}/
+cp -rf ${ARTIFACTS_DIR}/* ./pkg/${DIR_NAME}${BINARY_INSTALL_DIR}/
 
 log "Package: ${PACKAGE_NAME}"
 log "Version: ${VERSION}"
diff --git a/zombienet/docker/build_apt_package.sh b/zombienet/docker/build_apt_package.sh
index 5c82325b2e..bfbd7a74f2 100755
--- a/zombienet/docker/build_apt_package.sh
+++ b/zombienet/docker/build_apt_package.sh
@@ -71,7 +71,7 @@ mkdir -p ./pkg/${DIR_NAME}/DEBIAN
 mkdir -p ./pkg/${DIR_NAME}/usr/local/bin
 
 log "Copying artifacts..."
-mv -f ${ARTIFACTS_DIR}/* ./pkg/${DIR_NAME}/usr/local/bin/
+cp -rf ${ARTIFACTS_DIR}/* ./pkg/${DIR_NAME}/usr/local/bin/
 
 log "Creating control file..."
 cat <<EOF > ./pkg/${DIR_NAME}/DEBIAN/control