diff --git a/scripts/patch.sh b/scripts/patch.sh index 41401a8..0fdc028 100755 --- a/scripts/patch.sh +++ b/scripts/patch.sh @@ -1,5 +1,6 @@ #!/bin/bash +EXIT_CODE=0 SCRIPT_DIR=$(dirname "$0") PATCHES_DIR="$SCRIPT_DIR/patches" @@ -10,6 +11,11 @@ fi for patch_file in "$PATCHES_DIR"/*.sh; do if [ -f "$patch_file" ] && [ -x "$patch_file" ]; then - "$patch_file" + "$patch_file" "$1" + if [ $? -eq 2 ]; then + EXIT_CODE=2 + fi fi done + +exit $EXIT_CODE diff --git a/scripts/patches/patch-1.sh b/scripts/patches/patch-1.sh index 400b600..ba9cce1 100755 --- a/scripts/patches/patch-1.sh +++ b/scripts/patches/patch-1.sh @@ -1,25 +1,26 @@ #!/bin/bash -SERVICE_NAME="${1:-ghost-node.service}" +SERVICE_NAME="${2:-ghost-node.service}" if [[ "$SERVICE_NAME" != *.service ]]; then SERVICE_NAME="${SERVICE_NAME}.service" fi SERVICE_FULL_PATH="/etc/systemd/system/$SERVICE_NAME" -if [[ -e "$SERVICE_FULL_PATH" ]]; then - NETWORK_ONLINE_EXISTS=$(grep -Fx "After=network-online.target" "$SERVICE_FULL_PATH") - NETWORK_EXISTS=$(grep -Fx "After=network.target" "$SERVICE_FULL_PATH") +SKIPPED_NO_SERVICE="[-] patch-1 skipped: no serivce found at $SERVICE_FULL_PATH" +[[ ! -e "$SERVICE_FULL_PATH" ]] && { echo $SKIPPED_NO_SERVICE; exit 1; } - if [[ -z "$NETWORK_ONLINE_EXISTS" && -n "$NETWORK_EXISTS" ]] - then - echo "[+] patch-1 will be applied: missing network-online.target dependency in $SERVICE_FULL_PATH, trying to replace" - sudo sed -i "s/After=network.target/After=network-online.target\nRequires=network-online.target/g" "$SERVICE_FULL_PATH" - echo "sudo systemctl daemon-reload" - echo "sudo systemctl restart $SERVICE_NAME" - else - echo "[+] patch-1 already applied: network-online.target is set correctly for $SERVICE_FULL_PATH" - fi -else - echo "[-] patch-1 skipped: no serivce found at $SERVICE_FULL_PATH" -fi +NETWORK_ONLINE_EXISTS=$(grep -Fx "After=network-online.target" "$SERVICE_FULL_PATH") +NETWORK_EXISTS=$(grep -Fx "After=network.target" "$SERVICE_FULL_PATH") + +SKIPPED_SERVICE_OK="[+] patch-1 already applied: network-online.target is set correctly for $SERVICE_FULL_PATH" +[[ ! (-z "$NETWORK_ONLINE_EXISTS" && -n "$NETWORK_EXISTS") ]] && { echo $SKIPPED_SERVICE_OK; exit 0; } + +PATCH_MESSAGE="missing network-online.target dependency in $SERVICE_FULL_PATH" +[[ -z "$1" ]] && { echo "[!] patch-1 could be applied: $PATCH_MESSAGE"; exit 2; } + +echo "[+] patch-1 will be applied: $PATCH_MESSAGE" +sudo sed -i "s/After=network.target/After=network-online.target\nRequires=network-online.target/g" "$SERVICE_FULL_PATH" +echo "sudo systemctl daemon-reload" +echo "sudo systemctl restart $SERVICE_NAME" +exit 0 diff --git a/scripts/patches/patch-2.sh b/scripts/patches/patch-2.sh index 8a1dc4e..d0e8aff 100755 --- a/scripts/patches/patch-2.sh +++ b/scripts/patches/patch-2.sh @@ -1,16 +1,26 @@ #!/bin/bash LATEST_TESTED_VERSION=83 -DEPENDENCY_PATH=~/.local/share/cargo/git/checkouts/polkadot-sdk-dee0edd6eefa0594/b401690/substrate/primitives/io/src/lib.rs +MANIFEST_PATH=$(cargo metadata --format-version 1 | python3 -c " +import sys,json +data = json.load(sys.stdin) +for pkg in data['packages']: + if pkg['name'] == 'sp-io': + print(pkg['manifest_path']) + break +") +DEPENDENCY_PATH="${MANIFEST_PATH%Cargo.toml}src/lib.rs" +SKIPPED_PATCH_OK="[+] patch-2 not needed: rustc compiler version is compatible" cargo_version=$(cargo --version | cut -d'.' -f2) -if [ "$cargo_version" -gt "$LATEST_TESTED_VERSION" ]; then - if grep -q '#\[no_mangle\]' "$DEPENDENCY_PATH"; then - sed -i '/#\[no_mangle\]/d' "$DEPENDENCY_PATH" - echo "[+] patch-2 will be applied: remove unnecessary #[no_mangle] from the source code for sp-io" - else - echo "[+] patch-2 already applied: #[no_mangle] already removed from source code of sp-io" - fi -else - echo "[+] patch-2 not needed: rustc compiler version is compatible" -fi +[[ "$cargo_version" -le "$LATEST_TESTED_VERSION" ]] && { echo $SKIPPED_PATCH_OK; exit 0; } + +SKIPPED_PATCH_OK="[+] patch-2 already applied: #[no_mangle] already removed from source code of sp-io" +! grep -q '#\[no_mangle\]' "$DEPENDENCY_PATH" && { echo $SKIPPED_PATCH_OK; exit 0; } + +PATCH_MESSAGE="remove unnecessary #[no_mangle] from the source code for sp-io" +[[ -z "$1" ]] && { echo "[!] patch-2 could be applied: $PATCH_MESSAGE"; exit 2; } + +echo "[+] patch-2 will be applied: $PATCH_MESSAGE" +sed -i '/#\[no_mangle\]/d' "$DEPENDENCY_PATH" +exit 0 diff --git a/scripts/patches/patch-3.sh b/scripts/patches/patch-3.sh index 8ef91f4..1f0ee8b 100755 --- a/scripts/patches/patch-3.sh +++ b/scripts/patches/patch-3.sh @@ -4,14 +4,16 @@ LATEST_GCC_WORKING_VERSION=14 PATH_TO_BUILD_CONFIG=~/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/librocksdb-sys-0.11.0+8.1.1/build.rs GCC_MAJOR=$(gcc -dumpversion | cut -d. -f1) -if [ "$GCC_MAJOR" -gt "$LATEST_GCC_WORKING_VERSION" ]; then - if grep -q "config.flag(\"-include\").flag(\"cstdint\");" "$PATH_TO_BUILD_CONFIG"; then - echo "[+] patch-3 already applied: no need to change build config of librocksdb" - else - sed -i "/$(printf '%s' "config.compile(\"librocksdb.a\");" | sed 's/[].[*^$\/]/\\&/g')/i \ - if !target.contains(\"windows\") {\n config.flag(\"-include\").flag(\"cstdint\");\n }" "$PATH_TO_BUILD_CONFIG" - echo "[+] patch-3 will be applied: cstdint included for build config of librocksdb" - fi -else - echo "[+] patch-3 not needed: gcc version is good to compile without patch" -fi +SKIPPED_PATCH_OK="[+] patch-3 not needed: gcc version is good to compile without patch" +[[ "$GCC_MAJOR" -le "$LATEST_GCC_WORKING_VERSION" ]] && { echo $SKIPPED_PATCH_OK; exit 0; } + +SKIPPED_PATCH_OK="[+] patch-3 already applied: no need to change build config of librocksdb" +grep -q "config.flag(\"-include\").flag(\"cstdint\");" "$PATH_TO_BUILD_CONFIG" && { echo $SKIPPED_PATCH_OK; exit 0; } + +PATCH_MESSAGE="include cstdint for build config of librocksdb" +[[ -z "$1" ]] && { echo "[!] patch-3 could be applied: $PATCH_MESSAGE"; exit 2; } + +sed -i "/$(printf '%s' "config.compile(\"librocksdb.a\");" | sed 's/[].[*^$\/]/\\&/g')/i \ + if !target.contains(\"windows\") {\n config.flag(\"-include\").flag(\"cstdint\");\n }" "$PATH_TO_BUILD_CONFIG" +echo "[+] patch-3 will be applied: $PATCH_MESSAGE" +exit 0 diff --git a/scripts/starter.sh b/scripts/starter.sh index 77ce85b..58eb035 100755 --- a/scripts/starter.sh +++ b/scripts/starter.sh @@ -82,8 +82,9 @@ extract_seed() { upgrade_compiler_if_needed() { UPDATE_STATUS=$(rustup check 2>&1) - if echo "$UPDATE_STATUS" | grep -q "Update available"; then - asd + "$SCRIPT_FOLDER"/patch.sh || PATCH_STATUS=$? + + if echo "$UPDATE_STATUS" | grep -q "Update available" || [ $PATCH_STATUS -eq 2 ]; then echo "[+] clean all cache on the current system" cargo install cargo-cache cargo clean @@ -107,9 +108,7 @@ upgrade_compiler_if_needed() { cargo fetch echo "[+] trying to apply all patches" - "$SCRIPT_FOLDER"/patch.sh - else - echo "[+] rustc compiler version is up to date" + "$SCRIPT_FOLDER"/patch.sh apply fi }