unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#37394] [PATCH] gnu: Add tigervnc
@ 2019-09-12 19:33 Todor Kondić via Guix-patches via
  2019-10-01 23:28 ` bug#37394: " Danny Milosavljevic
  0 siblings, 1 reply; 2+ messages in thread
From: Todor Kondić via Guix-patches via @ 2019-09-12 19:33 UTC (permalink / raw)
  To: 37394


[-- Attachment #1.1: Type: text/plain, Size: 1625 bytes --]

Hi,

I needed a decent VNC server, so I wrapped up TigerVNC into two guix packages. One is for the client, and another for the server. Since the build procedure is non-standard (a combination of cmake for the viewer and some parts, but  then patch-and-compile  Xorg server for the VNC server) , I could not follow the ([understandably] scarcely documented) package definition procedures in Guix docs and, instead, mixed and matched things I gleaned from other Guix packages. The result works as far as I can tell and was tested in a VM, however, some parts of the package definition could probably be expressed more elegantly.

Also, it would be nice if the folks who created xorg-server package definition could check the various configure options in the server part, since the tigervnc-server inherits from xorg-server. For example, was it really necessary to disable Xephyr? I do not even know what is it for.

The vncserver script surprisingly works, but could probably customised a bit for the Guix distro. In addition, most distros have a systemd service to start the server. I do not  see this as a very important addition, given the Guix orientation towards user managed configs, but if someone wants to help me define one, I am open to it. One nice application for a service would be to implement the multi-user vnc server as described here https://developer.ibm.com/tutorials/os-multiuserloginsvnc/

Finally, the packages were linted, and indented using the script. The lint complains about certain minor things that I feel are better left the way they are.

Hopefully someone will find this useful.

Cheers,

Todor

[-- Attachment #1.2: Type: text/html, Size: 2238 bytes --]

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-tigervnc-client.patch --]
[-- Type: text/x-patch; name="0001-Add-tigervnc-client.patch", Size: 3870 bytes --]

From ca2c905e221edc176af8795a7096103a31b4940f Mon Sep 17 00:00:00 2001
From: Todor Kondić <tk.code@protonmail.com>
Date: Thu, 12 Sep 2019 20:56:33 +0200
Subject: [PATCH 1/2] gnu: Add tigervnc-client

* gnu/packages/tigervnc.scm: New file.
  (tigervnc-client): New variable.
---
 gnu/packages/tigervnc.scm | 89 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 gnu/packages/tigervnc.scm

diff --git a/gnu/packages/tigervnc.scm b/gnu/packages/tigervnc.scm
new file mode 100644
index 0000000000..71e63cc563
--- /dev/null
+++ b/gnu/packages/tigervnc.scm
@@ -0,0 +1,89 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Todor Kondić <tk.code@protonmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages tigervnc)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages fltk)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages cmake)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages commencement)
+  
+  #:use-module (guix build-system cmake)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix utils)
+  #:use-module ((guix licenses) #:prefix license:))
+
+
+
+(define-public tigervnc-client
+  (package
+    (name "tigervnc-client")
+    (version "1.9.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/TigerVNC/tigervnc.git")
+         (commit "v1.9.0")))
+       (sha256
+        (base32
+         "0b47fg3741qs3zdpl2zr0s6jz46dypp2j6gqrappbzm3ywnnmm1x"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (with-directory-excursion "vncviewer"
+                        (invoke "make" "install")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("gettext-minimal" ,gettext-minimal)
+       ("automake" ,automake)))
+    (inputs
+     `(("zlib" ,zlib)
+       ("gnutls" ,gnutls)
+       ("libjpeg-turbo" ,libjpeg-turbo)
+       ("fltk" ,fltk)
+       ("linux-pam" ,linux-pam)
+       ("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("libxtst" ,libxtst)
+       ("libxrandr" ,libxrandr)
+       ("libxdamage" ,libxdamage)))
+    (home-page "https://tigervnc.org")
+    (synopsis "High-performance, platform-neutral
+implementation of VNC (client)")
+    (description "TigerVNC is a client/server implementation of VNC (Virtual
+Network Computing).  It provides enough performance to run even 3D and video
+applications.  It also provides extensions for advanced authentication methods
+and TLS encryption.  This package installs only the VNC client, the
+application which is needed to connect to VNC servers.  ")
+    (license license:gpl2)))
+
+
-- 
2.23.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-Add-tigervnc-server.patch --]
[-- Type: text/x-patch; name="0002-Add-tigervnc-server.patch", Size: 8216 bytes --]

From d379c92550a27c7431065f7acaa8bb1984d1bd7a Mon Sep 17 00:00:00 2001
From: Todor Kondić <tk.code@protonmail.com>
Date: Thu, 12 Sep 2019 21:00:02 +0200
Subject: [PATCH 2/2] gnu: Add tigervnc-server

* gnu/packages/tigervnc.scm (tigervnc-server): New variable.
---
 gnu/packages/tigervnc.scm | 151 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 151 insertions(+)

diff --git a/gnu/packages/tigervnc.scm b/gnu/packages/tigervnc.scm
index 71e63cc563..933a1d2dff 100644
--- a/gnu/packages/tigervnc.scm
+++ b/gnu/packages/tigervnc.scm
@@ -87,3 +87,154 @@ application which is needed to connect to VNC servers.  ")
     (license license:gpl2)))
 
 
+;; A VNC server is, in fact, an X server so it seems like a good idea
+;; to build on the work already done for xorg-server package.  This is
+;; not entirely compatible with the recommendation in BUILDING.txt
+;; where the client is built first, then the source code of the X
+;; server is copied into a subdir of the build directory, patched with
+;; VNC additions and then build and installed as Xvnc.  The procedure
+;; was turned around, where TigerVNC code is downloaded and built
+;; inside the Guix X server build dir. Also, the VNC patching process
+;; for the X server is automated in a straightforward manner.
+(define-public tigervnc-server
+  (package
+    (inherit xorg-server)
+    (name "tigervnc-server")
+    (version "1.9.0")
+    (native-inputs
+     `(("tigervnc-src" ,(origin
+                          (method git-fetch)
+                          (uri
+                           (git-reference
+                            (url "https://github.com/TigerVNC/tigervnc.git")
+                            (commit "v1.9.0")))
+                          (sha256
+                           (base32
+                            "0b47fg3741qs3zdpl2zr0s6jz46dypp2j6gqrappbzm3ywnnmm1x"))))
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("gettext-minimal" ,gettext-minimal)
+       ("font-util" ,font-util)
+       ("cmake" ,cmake)
+       ("gcc-toolchain" ,gcc-toolchain)
+       ("perl" ,perl)
+       ,@(package-native-inputs tigervnc-client)
+       ,@(package-inputs tigervnc-client)
+       ,@(package-native-inputs xorg-server)))
+    (inputs
+     `(("perl" ,perl)
+       ("coreutils" ,coreutils)
+       ("xauth" ,xauth)
+       ,@(package-inputs xorg-server)))
+    (propagated-inputs
+     `(("xauth" ,xauth)
+       ,@(package-propagated-inputs xorg-server)))
+    (arguments
+     (substitute-keyword-arguments
+         (package-arguments xorg-server)
+       ((#:configure-flags flags)
+        `(append '("--with-pic"         ; Taken from BUILDING.txt
+                   "--without-dtrace"
+                   "--disable-static"
+                   "--disable-dri2"
+                   "--disable-xinerama"
+                   "--disable-xvfb"
+                   "--disable-xnest"
+                   "--disable-xorg"
+                   "--disable-dmx"
+                   "--disable-xwin"
+                   "--disable-xephyr"   ; Is this necessary? (*)
+                   "--disable-kdrive"
+                   ;; "--disable-config-dbus" ; This was a warning.
+                   "--disable-config-hal"
+                   "--disable-config-udev"
+                   "--disable-dri2"
+                   ;; "--enable-install-libxf86config" ; This, too, was a warning.
+                   "--enable-glx")
+                 (delete "--enable-xephyr" ,flags))) ; Is this necessary? (*)
+       ((#:modules modules)
+        `(append '((ice-9 ftw)
+                   (ice-9 match)
+                   (guix build utils)
+                   (guix build gnu-build-system))
+                 modules))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'check)              ;)
+           (add-after 'unpack 'copy-tvnc-xserver
+             (lambda _
+               (let*
+                   ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
+                    (tvnc-xserver (string-append tvnc-src "/unix/xserver")))
+                 (copy-recursively tvnc-xserver ".")
+                 #t)))
+           (add-after 'copy-tvnc-xserver 'patch-xserver
+             (lambda _
+               (let*
+                   ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
+                    (xorg-server-version ,(package-version xorg-server))
+                    (which-patch (lambda ()
+                                   (let*
+                                       ((patch-num (apply string-append
+                                                          (list-head (string-split xorg-server-version
+                                                                                   #\.)
+                                                                     2)))
+                                        (fn (format "~a/unix/xserver~a.patch" tvnc-src patch-num)))
+                                     (when (not (file-exists? fn))
+                                       (error (format "Patch file, ~a,
+corresponding to the input xorg-server version, does not exist.  Installation
+will fail.  " fn)))
+
+                                     fn))) ; VNC patches for xserver have the
+                                           ; form xserverXY[Y].patch, where
+                                           ; X.Y[Y].Z is the Xorg server
+					; version.
+		    
+                    (xserver-patch (which-patch)))
+                 (invoke "patch" "-p1" "-i" xserver-patch)
+                 (invoke "autoreconf" "-fiv"))))
+           (add-before 'build 'build-tigervnc
+             (lambda _
+               (let* ((out (assoc-ref %outputs "out"))
+                      (tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
+                      (tvnc-build (string-append (getcwd) "/tigervnc-build")))
+                 (mkdir-p tvnc-build)
+                 (with-directory-excursion tvnc-build
+                   (invoke "cmake" "-G" "Unix Makefiles"
+                           (string-append "-DCMAKE_INSTALL_PREFIX=" out)
+                           tvnc-src)
+                   (invoke "make" "-j" (number->string (parallel-job-count)))))))
+           (replace 'build
+             (lambda _
+               (let*  ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
+                       (tvnc-build (string-append (getcwd) "/tigervnc-build"))
+                       (srcarg (string-append "TIGERVNC_SRCDIR=" tvnc-src))
+                       (buildarg (string-append "TIGERVNC_BUILDDIR=" tvnc-build)))
+                 (invoke "make" srcarg buildarg "-j"
+                         (number->string (parallel-job-count))))))
+           (add-before 'install 'install-tigervnc-aux
+             (lambda _
+               (let*  ((out (assoc-ref %outputs 'out))
+                       (tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
+                       (tvnc-build (string-append (getcwd) "/tigervnc-build"))
+                       (srcarg (string-append "TIGERVNC_SRCDIR=" tvnc-src))
+                       (buildarg (string-append "TIGERVNC_BUILDDIR=" tvnc-build)))
+                 (with-directory-excursion (string-append tvnc-build "/unix")
+                   (invoke "make" srcarg buildarg "install")))))
+           (replace 'install
+             (lambda* _
+               (let*  ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
+                       (tvnc-build (string-append (getcwd) "/tigervnc-build"))
+                       (srcarg (string-append "TIGERVNC_SRCDIR=" tvnc-src))
+                       (buildarg (string-append "TIGERVNC_BUILDDIR=" tvnc-build)))
+                 (invoke "make" "install" srcarg buildarg))))))))
+    (description "TigerVNC is a client/server implementation of VNC (Virtual
+Network Computing).  It provides enough performance to run even 3D and video
+applications.  It also provides extensions for advanced authentication methods
+and TLS encryption.  This package installs the VNC server, a program that will
+enable users with VNC clients to log into a graphical session on the machine
+where the server is installed.  ") ))
+
+
+
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* bug#37394: [PATCH] gnu: Add tigervnc
  2019-09-12 19:33 [bug#37394] [PATCH] gnu: Add tigervnc Todor Kondić via Guix-patches via
@ 2019-10-01 23:28 ` Danny Milosavljevic
  0 siblings, 0 replies; 2+ messages in thread
From: Danny Milosavljevic @ 2019-10-01 23:28 UTC (permalink / raw)
  To: Todor Kondić via Guix-patches via; +Cc: 37394-done

[-- Attachment #1: Type: text/plain, Size: 606 bytes --]

Hi,

thanks for the patches!

On Thu, 12 Sep 2019 19:33:45 +0000
Todor Kondić via Guix-patches via <guix-patches@gnu.org> wrote:

> Also, it would be nice if the folks who created xorg-server package definition could check the various configure options in the server part, since the tigervnc-server inherits from xorg-server. For example, was it really necessary to disable Xephyr? I do not even know what is it for.

Xephyr is an X server whose output is a window instead of the entire screen.  That doesn't sound like one needs that in a VNC server (which does not render to a screen anyway).

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-10-01 23:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-12 19:33 [bug#37394] [PATCH] gnu: Add tigervnc Todor Kondić via Guix-patches via
2019-10-01 23:28 ` bug#37394: " Danny Milosavljevic

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).