Sistem Asistanı (v1.1) / paketle_pardus25.sh
paketle_pardus25.sh 159 satır • 5.60 KB
#!/bin/bash

# --- PROJE BİLGİLERİ ---
APP_NAME="sistem-asistani"
ICON_NAME="sistem-asistani"
VERSION="1.1"
ARCH="amd64"
MAINTAINER="Tarik Vardar <tarikvardar@gmail.com>"
WEBSITE="https://www.tarikvardar.com.tr"
DESCRIPTION="Gelismiş Linux Sistem Yonetim ve Analiz Araci"

# --- KLASÖR TANIMLARI ---
BUILD_DIR="build_deb"
OUTPUT_DEB="${APP_NAME}_${VERSION}_${ARCH}.deb"
LOCAL_DEPS="bagimliliklar"

echo "🚀 PAKETLEME SİHİRBAZI BAŞLATILIYOR (v$VERSION)..."

# ==============================================================================
# 1. TEMİZLİK
# ==============================================================================
echo "🧹 Temizlik yapılıyor..."
rm -rf build dist $BUILD_DIR *.deb *.spec
# Not: bagimliliklar klasörünü silmiyoruz, varsa güncelliyoruz.

# ==============================================================================
# 2. BAĞIMLILIKLARI YEREL KLASÖRE İNDİR (Offline Destek İçin)
# ==============================================================================
echo "⬇️  Bağımlılıklar '$LOCAL_DEPS' klasörüne indiriliyor..."
if ! command -v pip3 &> /dev/null; then
    sudo apt-get update && sudo apt-get install -y python3-pip
fi

mkdir -p $LOCAL_DEPS
# --upgrade stratejisi ile sadece gerekli olanları indirir
pip3 install -r requirements.txt --target "$LOCAL_DEPS" --upgrade --break-system-packages

# Gereksiz önbellekleri temizle
find "$LOCAL_DEPS" -name "__pycache__" -type d -exec rm -rf {} +
find "$LOCAL_DEPS" -name "*.dist-info" -type d -exec rm -rf {} +

# ==============================================================================
# 3. PYINSTALLER İLE DERLEME
# ==============================================================================
echo "📦 PyInstaller ile tek parça haline getiriliyor..."
# PYTHONPATH'e yerel bağımlılıkları ekliyoruz ki PyInstaller oradan alsın
export PYTHONPATH="$(pwd)/$LOCAL_DEPS:$PYTHONPATH"

# --paths="$LOCAL_DEPS" ekleyerek PyInstaller'a kütüphaneleri gösteriyoruz
python3 -m PyInstaller sistem_asistani.py \
    --name="SistemAsistani" \
    --onedir \
    --windowed \
    --noconsole \
    --clean \
    --noconfirm \
    --strip \
    --paths="$LOCAL_DEPS" \
    --add-data="icons:icons" \
    --add-data="sayfalar:sayfalar" \
    --icon="icons/sistem-asistani.png" \
    --contents-directory="libs" \
    --hidden-import="PyQt6" \
    --hidden-import="PyQt6.QtCore" \
    --hidden-import="PyQt6.QtGui" \
    --hidden-import="PyQt6.QtWidgets" \
    --hidden-import="PyQt6.QtWebEngineWidgets" \
    --hidden-import="PyQt6.QtWebEngineCore" \
    --hidden-import="PyQt6.QtNetwork" \
    --collect-all="PyQt6" \
    --collect-all="PyQt6_WebEngine" \
    --collect-all="requests" \
    --collect-all="psutil"

if [ ! -d "dist/SistemAsistani" ]; then
    echo "❌ HATA: Derleme başarısız oldu!"
    exit 1
fi

# ==============================================================================
# 4. DEB PAKET YAPISI
# ==============================================================================
echo "📂 .deb paket yapısı kuruluyor..."

mkdir -p $BUILD_DIR/DEBIAN
mkdir -p $BUILD_DIR/opt/$APP_NAME
mkdir -p $BUILD_DIR/usr/bin
mkdir -p $BUILD_DIR/usr/share/applications
mkdir -p $BUILD_DIR/usr/share/icons/hicolor/512x512/apps
mkdir -p $BUILD_DIR/usr/share/pixmaps

# Uygulamayı /opt altına kopyala
cp -r dist/SistemAsistani/* $BUILD_DIR/opt/$APP_NAME/

# İkonları kopyala
mkdir -p $BUILD_DIR/opt/$APP_NAME/icons
cp icons/sistem-asistani.png $BUILD_DIR/opt/$APP_NAME/icons/
cp icons/sistem-asistani-dark.png $BUILD_DIR/opt/$APP_NAME/icons/

# Sistem ikonları
cp icons/sistem-asistani.png $BUILD_DIR/usr/share/icons/hicolor/512x512/apps/$ICON_NAME.png
cp icons/sistem-asistani.png $BUILD_DIR/usr/share/pixmaps/$ICON_NAME.png

# ==============================================================================
# 5. BAŞLATICI VE DESKTOP DOSYASI
# ==============================================================================
cat > $BUILD_DIR/usr/bin/$APP_NAME << EOF
#!/bin/bash
export QT_QPA_PLATFORM=xcb
cd /opt/$APP_NAME
./SistemAsistani "\$@"
EOF
chmod 755 $BUILD_DIR/usr/bin/$APP_NAME

cat > $BUILD_DIR/usr/share/applications/$APP_NAME.desktop << EOF
[Desktop Entry]
Name=Sistem Asistanı
Comment=Sistem Bakım ve Analiz Aracı
Exec=/usr/bin/$APP_NAME
Icon=$ICON_NAME
Terminal=false
Type=Application
Categories=System;Utility;
StartupNotify=true
EOF
chmod 644 $BUILD_DIR/usr/share/applications/$APP_NAME.desktop

# ==============================================================================
# 6. CONTROL DOSYASI
# ==============================================================================
# NOT: python3-pyqt6.qtwebengine paketi, libqt6* kütüphanelerini otomatik çeker.
# Bu yöntem Pardus 25 ve Debian 12 için en güvenli yoldur.
cat > $BUILD_DIR/DEBIAN/control << EOF
Package: $APP_NAME
Version: $VERSION
Architecture: $ARCH
Maintainer: $MAINTAINER
Homepage: $WEBSITE
Depends: libc6, libgl1, libegl1, pkexec, libxcb-cursor0, libxcb-xinerama0, libnss3, libasound2, network-manager, python3-pyqt6.qtwebengine
Recommends: smartmontools, nmap, ufw
Section: utils
Priority: optional
Description: $DESCRIPTION
 Bu paket tam sürüm olup internet gerektirmez.
 Tüm Python bağımlılıkları pakete gömülüdür.
EOF
chmod 755 $BUILD_DIR/DEBIAN/control

# ==============================================================================
# 7. PAKETLEME
# ==============================================================================
echo "🔒 İzinler ayarlanıyor..."
chmod -R 755 $BUILD_DIR/opt/$APP_NAME
chmod -R 755 $BUILD_DIR/DEBIAN

echo "📦 .deb paketi oluşturuluyor..."
dpkg-deb --root-owner-group --build $BUILD_DIR $OUTPUT_DEB

echo "✅ TAMAMLANDI: $OUTPUT_DEB"