From 36f91fc73f755a55d8aa045b00e791de49dc4475 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 30 Aug 2024 09:54:06 +0200 Subject: [PATCH 1/2] winbox4: init at 4.0beta9 Signed-off-by: Sefa Eyeoglu --- pkgs/by-name/wi/winbox4/package.nix | 78 +++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 3 +- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 pkgs/by-name/wi/winbox4/package.nix diff --git a/pkgs/by-name/wi/winbox4/package.nix b/pkgs/by-name/wi/winbox4/package.nix new file mode 100644 index 000000000000..ed5975f3d5e8 --- /dev/null +++ b/pkgs/by-name/wi/winbox4/package.nix @@ -0,0 +1,78 @@ +{ + autoPatchelfHook, + copyDesktopItems, + fetchurl, + fontconfig, + freetype, + lib, + libGL, + libxkbcommon, + makeDesktopItem, + stdenvNoCC, + unzip, + xorg, + zlib, +}: + +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "winbox"; + version = "4.0beta9"; + + src = fetchurl { + name = "WinBox_Linux-${finalAttrs.version}.zip"; + url = "https://download.mikrotik.com/routeros/winbox/${finalAttrs.version}/WinBox_Linux.zip"; + hash = "sha256-129ejj3WxYx5kQTy6EOLtBolhx076yMVb5ymkAoXrwc="; + }; + + sourceRoot = "."; + + nativeBuildInputs = [ + autoPatchelfHook + copyDesktopItems + unzip + ]; + + buildInputs = [ + fontconfig + freetype + libGL + libxkbcommon + xorg.libxcb + xorg.xcbutilimage + xorg.xcbutilkeysyms + xorg.xcbutilrenderutil + xorg.xcbutilwm + zlib + ]; + + installPhase = '' + runHook preInstall + + install -Dm644 "assets/img/winbox.png" "$out/share/pixmaps/winbox.png" + install -Dm755 "WinBox" $out/bin/WinBox + + runHook postInstall + ''; + + desktopItems = [ + (makeDesktopItem { + name = "winbox"; + desktopName = "Winbox"; + comment = "GUI administration for Mikrotik RouterOS"; + exec = "WinBox"; + icon = "winbox"; + categories = [ "Utility" ]; + }) + ]; + + meta = { + description = "Graphical configuration utility for RouterOS-based devices"; + homepage = "https://mikrotik.com"; + downloadPage = "https://mikrotik.com/download"; + changelog = "https://download.mikrotik.com/routeros/winbox/${finalAttrs.version}/CHANGELOG"; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + license = lib.licenses.unfree; + mainProgram = "WinBox"; + maintainers = with lib.maintainers; [ Scrumplex yrd ]; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 207b82ffe11f..68c282b1caa8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2025,7 +2025,8 @@ with pkgs; vrrtest = callPackage ../tools/video/vrrtest { }; - winbox = callPackage ../tools/admin/winbox { + winbox = winbox3; + winbox3 = callPackage ../tools/admin/winbox { wine = wineWowPackages.stable; }; From 6b57adbbea014be757ef9354bef04f33f255ba40 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 30 Aug 2024 23:14:38 +0200 Subject: [PATCH 2/2] winbox4: add migration script Signed-off-by: Sefa Eyeoglu --- pkgs/by-name/wi/winbox4/package.nix | 52 +++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/wi/winbox4/package.nix b/pkgs/by-name/wi/winbox4/package.nix index ed5975f3d5e8..a3c9a7b83a9a 100644 --- a/pkgs/by-name/wi/winbox4/package.nix +++ b/pkgs/by-name/wi/winbox4/package.nix @@ -8,8 +8,10 @@ libGL, libxkbcommon, makeDesktopItem, + makeWrapper, stdenvNoCC, unzip, + writeShellApplication, xorg, zlib, }: @@ -29,6 +31,8 @@ stdenvNoCC.mkDerivation (finalAttrs: { nativeBuildInputs = [ autoPatchelfHook copyDesktopItems + # makeBinaryWrapper does not support --run + makeWrapper unzip ]; @@ -49,7 +53,9 @@ stdenvNoCC.mkDerivation (finalAttrs: { runHook preInstall install -Dm644 "assets/img/winbox.png" "$out/share/pixmaps/winbox.png" - install -Dm755 "WinBox" $out/bin/WinBox + install -Dm755 "WinBox" "$out/bin/WinBox" + + wrapProgram "$out/bin/WinBox" --run "${lib.getExe finalAttrs.migrationScript}" runHook postInstall ''; @@ -65,6 +71,45 @@ stdenvNoCC.mkDerivation (finalAttrs: { }) ]; + migrationScript = writeShellApplication { + name = "winbox-migrate"; + text = '' + XDG_DATA_HOME=''${XDG_DATA_HOME:-$HOME/.local/share} + targetFile="$XDG_DATA_HOME/MikroTik/WinBox/Addresses.cdb" + + if [ -f "$targetFile" ]; then + echo "NixOS: WinBox 4 data already present at $(dirname "$targetFile"). Skipping automatic migration." + exit 0 + fi + + # cover both wine prefix variants + # latter was used until https://github.com/NixOS/nixpkgs/pull/329626 was merged on 2024/07/24 + winePrefixes=( + "''${WINEPREFIX:-$HOME/.wine}" + "''${WINBOX_HOME:-$XDG_DATA_HOME/winbox}/wine" + ) + sourceFilePathSuffix="drive_c/users/$USER/AppData/Roaming/Mikrotik/Winbox/Addresses.cdb" + selectedSourceFile="" + + for prefix in "''${winePrefixes[@]}" + do + echo "NixOS: Probing WinBox 3 data path at $prefix..." + if [ -f "$prefix/$sourceFilePathSuffix" ]; then + selectedSourceFile="$prefix/$sourceFilePathSuffix" + break + fi + done + + if [ -z "$selectedSourceFile" ]; then + echo "NixOS: WinBox 3 data not found. Skipping automatic migration." + exit 0 + fi + + echo "NixOS: Automatically migrating WinBox 3 data..." + install -Dvm644 "$selectedSourceFile" "$targetFile" + ''; + }; + meta = { description = "Graphical configuration utility for RouterOS-based devices"; homepage = "https://mikrotik.com"; @@ -73,6 +118,9 @@ stdenvNoCC.mkDerivation (finalAttrs: { sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; license = lib.licenses.unfree; mainProgram = "WinBox"; - maintainers = with lib.maintainers; [ Scrumplex yrd ]; + maintainers = with lib.maintainers; [ + Scrumplex + yrd + ]; }; })