This commit is contained in:
136
scripts/ci/install-system-deps/install-linux.sh
Executable file
136
scripts/ci/install-system-deps/install-linux.sh
Executable file
@@ -0,0 +1,136 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
||||
|
||||
source "$REPO_ROOT/scripts/lib/retry.sh"
|
||||
|
||||
echo "::group::Installing Linux dependencies"
|
||||
|
||||
echo "Updating package index..."
|
||||
if ! retry_with_backoff sudo apt-get update; then
|
||||
echo "::warning::apt-get update failed after retries, continuing anyway..."
|
||||
fi
|
||||
|
||||
packages=(
|
||||
tesseract-ocr
|
||||
tesseract-ocr-eng
|
||||
tesseract-ocr-tur
|
||||
tesseract-ocr-deu
|
||||
fonts-liberation
|
||||
fonts-dejavu-core
|
||||
fonts-noto-core
|
||||
libssl-dev
|
||||
pkg-config
|
||||
build-essential
|
||||
cmake
|
||||
libmagic-dev
|
||||
libuv1-dev
|
||||
php-cli
|
||||
php-dev
|
||||
)
|
||||
|
||||
echo "Installing dependencies..."
|
||||
if retry_with_backoff_timeout 900 sudo apt-get install -y "${packages[@]}"; then
|
||||
echo "✓ All packages installed successfully"
|
||||
else
|
||||
exit_code=$?
|
||||
if [ $exit_code -eq 124 ]; then
|
||||
echo "::error::Package installation timed out after 15 minutes"
|
||||
else
|
||||
echo "::warning::Some packages failed to install, attempting individual installs..."
|
||||
for pkg in tesseract-ocr libssl-dev pkg-config cmake; do
|
||||
echo "Installing $pkg..."
|
||||
if retry_with_backoff_timeout 300 sudo apt-get install -y "$pkg" 2>&1; then
|
||||
echo " ✓ $pkg installed"
|
||||
else
|
||||
echo " ⚠ Failed to install $pkg"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Verifying Linux installations"
|
||||
|
||||
echo "CMake:"
|
||||
if command -v cmake >/dev/null 2>&1; then
|
||||
cmake --version | head -1
|
||||
echo "✓ CMake available"
|
||||
# Export CMAKE environment variable for immediate availability in build scripts
|
||||
CMAKE_FULL_PATH="$(command -v cmake)"
|
||||
if [[ -n "$GITHUB_ENV" ]]; then
|
||||
echo "CMAKE=$CMAKE_FULL_PATH" >>"$GITHUB_ENV"
|
||||
echo "✓ Set CMAKE=$CMAKE_FULL_PATH in GITHUB_ENV"
|
||||
fi
|
||||
# Also add cmake binary directory to GITHUB_PATH for subsequent steps
|
||||
CMAKE_BIN="$(dirname "$CMAKE_FULL_PATH")"
|
||||
if [[ -n "$GITHUB_PATH" && -d "$CMAKE_BIN" ]]; then
|
||||
echo "$CMAKE_BIN" >>"$GITHUB_PATH"
|
||||
echo "✓ Added cmake directory to GITHUB_PATH: $CMAKE_BIN"
|
||||
fi
|
||||
else
|
||||
echo "::error::CMake not found after installation"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Tesseract:"
|
||||
if command -v tesseract >/dev/null 2>&1; then
|
||||
if tesseract --version 2>/dev/null | head -1; then
|
||||
echo "✓ Tesseract CLI available"
|
||||
else
|
||||
echo "::warning::Tesseract CLI present but failed to run"
|
||||
fi
|
||||
else
|
||||
echo "::warning::Tesseract CLI not found; continuing (OCR will rely on bundled Tesseract)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Available Tesseract languages:"
|
||||
if command -v tesseract >/dev/null 2>&1; then
|
||||
tesseract --list-langs | head -10 || true
|
||||
else
|
||||
echo "(tesseract CLI not available)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "PHP:"
|
||||
if command -v php >/dev/null 2>&1; then
|
||||
php --version | head -1
|
||||
echo "✓ PHP available"
|
||||
else
|
||||
echo "::error::PHP not found after installation"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Checking Tesseract data path..."
|
||||
|
||||
tessdata_found=0
|
||||
for tessdata_path in "/usr/share/tesseract-ocr/5/tessdata" "/usr/share/tesseract-ocr/tessdata"; do
|
||||
if [ -d "$tessdata_path" ]; then
|
||||
echo "Found tessdata at: $tessdata_path"
|
||||
|
||||
echo "Required language files:"
|
||||
for lang in eng tur deu; do
|
||||
if [ -f "$tessdata_path/${lang}.traineddata" ]; then
|
||||
size=$(stat -c%s "$tessdata_path/${lang}.traineddata" 2>/dev/null || echo "unknown")
|
||||
echo " ✓ ${lang}.traineddata ($size bytes)"
|
||||
else
|
||||
echo " ⚠ ${lang}.traineddata (missing)"
|
||||
fi
|
||||
done
|
||||
tessdata_found=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $tessdata_found -eq 0 ]; then
|
||||
echo "::error::Tessdata directory not found in standard locations"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "::endgroup::"
|
||||
Reference in New Issue
Block a user