Commit ae02b6ea authored by sund3RRR's avatar sund3RRR
Browse files

amnezia-vpn: 4.8.2.3 -> 4.8.3.1

parent 6d019667
Loading
Loading
Loading
Loading
+19 −18
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@
  kdePackages,
  qt6,
  libsecret,
  xdg-utils,
  amneziawg-go,
  openvpn,
  shadowsocks-rust,
@@ -20,6 +19,7 @@
  zlib,
  tun2socks,
  xray,
  nix-update-script,
}:
let
  amnezia-tun2socks = tun2socks.overrideAttrs (
@@ -35,13 +35,6 @@ let
      };

      vendorHash = "sha256-VvOaTJ6dBFlbGZGxnHy2sCtds1tyhu6VsPewYpsDBiM=";

      ldflags = [
        "-w"
        "-s"
        "-X github.com/amnezia-vpn/amnezia-tun2socks/v2/internal/version.Version=v${finalAttrs.version}"
        "-X github.com/amnezia-vpn/amnezia-tun2socks/v2/internal/version.GitCommit=v${finalAttrs.version}"
      ];
    }
  );

@@ -63,18 +56,16 @@ let
in
stdenv.mkDerivation (finalAttrs: {
  pname = "amnezia-vpn";
  version = "4.8.2.3";
  version = "4.8.3.1";

  src = fetchFromGitHub {
    owner = "amnezia-vpn";
    repo = "amnezia-client";
    tag = finalAttrs.version;
    hash = "sha256-bCWPyRW2xnnopcwfPHgQrdP85Ct0CDufJRQ1PvCAiDE=";
    hash = "sha256-U/fVO9GcSdxFg5r57vX5Ylgu6CMjG4GKyInIgBNUiEw=";
    fetchSubmodules = true;
  };

  patches = [ ./router.patch ];

  postPatch =
    ''
      substituteInPlace client/platforms/linux/daemon/wireguardutilslinux.cpp \
@@ -82,8 +73,7 @@ stdenv.mkDerivation (finalAttrs: {
      substituteInPlace client/utilities.cpp \
        --replace-fail 'return Utils::executable("../../client/bin/openvpn", true);' 'return Utils::executable("${openvpn}/bin/openvpn", false);' \
        --replace-fail 'return Utils::executable("../../client/bin/tun2socks", true);' 'return Utils::executable("${amnezia-tun2socks}/bin/amnezia-tun2socks", false);' \
        --replace-fail 'return Utils::usrExecutable("wg-quick");' 'return Utils::executable("${wireguard-tools}/bin/wg-quick", false);' \
        --replace-fail 'QProcess::execute(QString("pkill %1").arg(name));' 'return QProcess::execute(QString("pkill -f %1").arg(name)) == 0;'
        --replace-fail 'return Utils::usrExecutable("wg-quick");' 'return Utils::executable("${wireguard-tools}/bin/wg-quick", false);'
      substituteInPlace client/protocols/xrayprotocol.cpp \
        --replace-fail 'return Utils::executable(QString("xray"), true);' 'return Utils::executable(QString("${amnezia-xray}/bin/xray"), false);'
      substituteInPlace client/protocols/openvpnovercloakprotocol.cpp \
@@ -91,11 +81,10 @@ stdenv.mkDerivation (finalAttrs: {
      substituteInPlace client/protocols/shadowsocksvpnprotocol.cpp \
        --replace-fail 'return Utils::executable(QString("/ss-local"), true);' 'return Utils::executable(QString("${shadowsocks-rust}/bin/sslocal"), false);'
      substituteInPlace client/configurators/openvpn_configurator.cpp \
        --replace-fail ".arg(qApp->applicationDirPath());" ".arg(\"$out/local/bin\");"
        --replace-fail ".arg(qApp->applicationDirPath());" ".arg(\"$out/libexec\");"
      substituteInPlace client/ui/qautostart.cpp \
        --replace-fail "/usr/share/pixmaps/AmneziaVPN.png" "$out/share/pixmaps/AmneziaVPN.png"
      substituteInPlace deploy/installer/config/AmneziaVPN.desktop.in \
        --replace-fail "#!/usr/bin/env xdg-open" "#!${xdg-utils}/bin/xdg-open" \
        --replace-fail "/usr/share/pixmaps/AmneziaVPN.png" "$out/share/pixmaps/AmneziaVPN.png"
      substituteInPlace deploy/data/linux/AmneziaVPN.service \
        --replace-fail "ExecStart=/opt/AmneziaVPN/service/AmneziaVPN-service.sh" "ExecStart=$out/bin/AmneziaVPN-service" \
@@ -137,14 +126,26 @@ stdenv.mkDerivation (finalAttrs: {
  ];

  postInstall = ''
    mkdir -p $out/bin $out/local/bin $out/share/applications $out/share/pixmaps $out/lib/systemd/system
    mkdir -p $out/bin $out/libexec $out/share/applications $out/share/pixmaps $out/lib/systemd/system
    cp client/AmneziaVPN service/server/AmneziaVPN-service $out/bin/
    cp ../deploy/data/linux/client/bin/update-resolv-conf.sh $out/local/bin/
    cp ../deploy/data/linux/client/bin/update-resolv-conf.sh $out/libexec/
    cp ../AppDir/AmneziaVPN.desktop $out/share/applications/
    cp ../deploy/data/linux/AmneziaVPN.png $out/share/pixmaps/
    cp ../deploy/data/linux/AmneziaVPN.service $out/lib/systemd/system/
  '';

  passthru = {
    inherit amnezia-tun2socks amnezia-xray;
    updateScript = nix-update-script {
      extraArgs = [
        "--subpackage"
        "amnezia-tun2socks"
        "--subpackage"
        "amnezia-xray"
      ];
    };
  };

  meta = with lib; {
    description = "Amnezia VPN Client";
    downloadPage = "https://amnezia.org/en/downloads";
+0 −54
Original line number Diff line number Diff line
--- a/service/server/router_linux.cpp   2025-01-01 11:36:27.615658613 +0300
+++ b/service/server/router_linux.cpp   2025-01-01 18:07:57.300178080 +0300
@@ -19,9 +19,27 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <QFileInfo>
+#include <QStringList>
+#include <QString>
 
 #include <core/networkUtilities.h>
 
+bool isServiceActive(const QString &serviceName) {
+    QProcess process;
+    process.start("systemctl", { "list-units", "--type=service", "--state=running", "--no-legend" });
+    process.waitForFinished();
+
+    QString output = process.readAllStandardOutput();
+    QStringList services = output.split('\n', Qt::SkipEmptyParts);
+
+    for (const QString &service : services) {
+        if (service.contains(serviceName)) {
+            return true;
+        }
+    }
+    return false;
+}
+
 RouterLinux &RouterLinux::Instance()
 {
     static RouterLinux s;
@@ -158,15 +176,14 @@
     p.setProcessChannelMode(QProcess::MergedChannels);
 
     //check what the dns manager use
-    if (QFileInfo::exists("/usr/bin/nscd")
-        || QFileInfo::exists("/usr/sbin/nscd")
-        || QFileInfo::exists("/usr/lib/systemd/system/nscd.service"))
-    {
-        p.start("systemctl restart nscd");
-    }
-    else
-    {
-        p.start("systemctl restart systemd-resolved");
+    if (isServiceActive("nscd.service")) {
+        qDebug() << "Restarting nscd.service";
+        p.start("systemctl", { "restart", "nscd" });
+    } else if (isServiceActive("systemd-resolved.service")) {
+        qDebug() << "Restarting systemd-resolved.service";
+        p.start("systemctl", { "restart", "systemd-resolved" });
+    } else {
+        qDebug() << "No suitable DNS manager found.";
     }
 
     p.waitForFinished();