* [bug#74670] [PATCH] tests: pack: Fix AppImage tests.
2024-12-03 15:13 [bug#74670] [PATCH] tests: pack: Fix AppImage tests Noé Lopez via Guix-patches via
@ 2024-12-12 21:58 ` Ludovic Courtès
2024-12-12 21:59 ` Ludovic Courtès
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Ludovic Courtès @ 2024-12-12 21:58 UTC (permalink / raw)
To: Noé Lopez; +Cc: 74670
[-- Attachment #1: Type: text/plain, Size: 1130 bytes --]
Hi Noé,
Noé Lopez <noe@noé.eu> skribis:
> From: Noé Lopez <noelopez@free.fr>
>
> * tests/pack.scm: Add glibc to AppImage tests’ profiles.
>
> Change-Id: I7890b902f65a2944ae8fa03db8a964deda3c725c
> ---
> Hi,
>
> This patch fixes the tests failing for AppImage pack. I believe the issue was
> that without the AppImage runtime (--appimage-extract-and-run), the glibc is
> not available to the AppRun binary, causing a file not found error.
>
> This is an issue caused because AppRun is built using the relocatable runtime,
> which requires (or at least is built with) the glibc.
Hmm, that further limits the applicability of AppImage, but OK. (Not
our fault!)
I noticed that the tests were not going very far, so I tried the patch
below to: (1) check the output of ‘hello’ in the first test, (2) change
the second test to check for the existence of /var/guix/db/db.sqlite.
The second test doesn’t work though, because where’s that file supposed
to live? The image is apparently extracted in an unguessable directory,
so cannot tell where it is. Am I right?
Thanks,
Ludo’.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 4798 bytes --]
diff --git a/tests/pack.scm b/tests/pack.scm
index 2cb643f136..7fcae1ec1f 100644
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@ -39,9 +39,10 @@ (define-module (test-pack)
#:use-module ((gnu packages package-management) #:select (rpm))
#:use-module ((gnu packages compression) #:select (squashfs-tools))
#:use-module ((gnu packages debian) #:select (dpkg))
- #:use-module ((gnu packages guile) #:select (guile-sqlite3))
+ #:use-module ((gnu packages guile) #:select (guile-sqlite3 guile-3.0))
#:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
#:use-module ((gnu packages linux) #:select (fakeroot))
+ #:use-module ((ice-9 textual-ports) #:select (get-string-all))
#:use-module (srfi srfi-64))
(define %store
@@ -347,7 +348,9 @@ (define rpm-for-tests
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))
(profile -> (profile
- (content (packages->manifest (list %bootstrap-guile hello glibc)))
+ ;; When using '--appimage-extract-and-run', the dynamic
+ ;; linker is necessary, hence glibc below.
+ (content (packages->manifest (list hello glibc)))
(hooks '())
(locales? #f)))
(image (self-contained-appimage "hello-appimage" profile
@@ -366,34 +369,46 @@ (define rpm-for-tests
(lambda (port)
(dump-port pipe port)))
(exit (status:exit-val (close-pipe pipe)))))))))
- (built-derivations (list (pk 'APPIMAGE-drv check)))))
+ (mbegin %store-monad
+ (built-derivations (list (pk 'APPIMAGE-drv check)))
+ (return (string=? (call-with-input-file (derivation->output-path check)
+ get-string-all)
+ "Hello, world!\n")))))
(unless store (test-skip 1))
(test-assertm "appimage + localstatedir"
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))
(profile -> (profile
- (content (packages->manifest (list %bootstrap-guile hello glibc)))
+ ;; When using '--appimage-extract-and-run', the dynamic
+ ;; linker is necessary, hence glibc below.
+ (content (packages->manifest (list guile-3.0 glibc)))
(hooks '())
(locales? #f)))
- (image (self-contained-appimage "hello-appimage" profile
- #:entry-point "bin/hello"
+ (image (self-contained-appimage "guile-appimage" profile
+ #:entry-point "bin/guile"
#:localstatedir? #t
#:extra-options
'(#:relocatable? #t)))
(check (gexp->derivation
- "check-appimage"
- (with-imported-modules '((guix build utils))
- #~(begin
- (use-modules (ice-9 popen)
- (guix build utils))
- (let ((pipe (open-pipe* OPEN_READ
- #$image "--appimage-extract-and-run")))
- (call-with-output-file #$output
- (lambda (port)
- (dump-port pipe port)))
- (exit (status:exit-val (close-pipe pipe)))))))))
- (built-derivations (list (pk 'APPIMAGE-drv check)))))
+ "check-appimage-with-localstatedir"
+ #~(begin
+ (system* #$image "--appimage-extract-and-run" "-c"
+ (object->string
+ `(call-with-output-file #$output
+ (lambda (port)
+ (display "Hello from Guile!\n"
+ port)))))
+ (execl #$image #$image "--appimage-extract-and-run" "-c"
+ (object->string
+ '(exit
+ (pk 'db? (getcwd)
+ (file-exists? "var/guix/db/db.sqlite")))))))))
+ (mbegin %store-monad
+ (built-derivations (list (pk 'APPIMAGE-drv check)))
+ (return (string=? (call-with-input-file (derivation->output-path check)
+ get-string-all)
+ "Hello from Guile!\n")))))
(unless store (test-skip 1))
(test-assertm "deb archive with symlinks and control files"
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#74670] [PATCH] tests: pack: Fix AppImage tests.
2024-12-03 15:13 [bug#74670] [PATCH] tests: pack: Fix AppImage tests Noé Lopez via Guix-patches via
2024-12-12 21:58 ` Ludovic Courtès
@ 2024-12-12 21:59 ` Ludovic Courtès
2024-12-18 23:58 ` [bug#74670] [PATCH v2 0/2] " Noé Lopez via Guix-patches
2024-12-19 0:23 ` [bug#74670] [PATCH v3 0/2] tests: pack: Fix AppImage tests Noé Lopez via Guix-patches via
3 siblings, 0 replies; 9+ messages in thread
From: Ludovic Courtès @ 2024-12-12 21:59 UTC (permalink / raw)
To: Noé Lopez; +Cc: 74670
[-- Attachment #1: Type: text/plain, Size: 1130 bytes --]
Hi Noé,
Noé Lopez <noe@noé.eu> skribis:
> From: Noé Lopez <noelopez@free.fr>
>
> * tests/pack.scm: Add glibc to AppImage tests’ profiles.
>
> Change-Id: I7890b902f65a2944ae8fa03db8a964deda3c725c
> ---
> Hi,
>
> This patch fixes the tests failing for AppImage pack. I believe the issue was
> that without the AppImage runtime (--appimage-extract-and-run), the glibc is
> not available to the AppRun binary, causing a file not found error.
>
> This is an issue caused because AppRun is built using the relocatable runtime,
> which requires (or at least is built with) the glibc.
Hmm, that further limits the applicability of AppImage, but OK. (Not
our fault!)
I noticed that the tests were not going very far, so I tried the patch
below to: (1) check the output of ‘hello’ in the first test, (2) change
the second test to check for the existence of /var/guix/db/db.sqlite.
The second test doesn’t work though, because where’s that file supposed
to live? The image is apparently extracted in an unguessable directory,
so cannot tell where it is. Am I right?
Thanks,
Ludo’.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 4798 bytes --]
diff --git a/tests/pack.scm b/tests/pack.scm
index 2cb643f136..7fcae1ec1f 100644
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@ -39,9 +39,10 @@ (define-module (test-pack)
#:use-module ((gnu packages package-management) #:select (rpm))
#:use-module ((gnu packages compression) #:select (squashfs-tools))
#:use-module ((gnu packages debian) #:select (dpkg))
- #:use-module ((gnu packages guile) #:select (guile-sqlite3))
+ #:use-module ((gnu packages guile) #:select (guile-sqlite3 guile-3.0))
#:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
#:use-module ((gnu packages linux) #:select (fakeroot))
+ #:use-module ((ice-9 textual-ports) #:select (get-string-all))
#:use-module (srfi srfi-64))
(define %store
@@ -347,7 +348,9 @@ (define rpm-for-tests
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))
(profile -> (profile
- (content (packages->manifest (list %bootstrap-guile hello glibc)))
+ ;; When using '--appimage-extract-and-run', the dynamic
+ ;; linker is necessary, hence glibc below.
+ (content (packages->manifest (list hello glibc)))
(hooks '())
(locales? #f)))
(image (self-contained-appimage "hello-appimage" profile
@@ -366,34 +369,46 @@ (define rpm-for-tests
(lambda (port)
(dump-port pipe port)))
(exit (status:exit-val (close-pipe pipe)))))))))
- (built-derivations (list (pk 'APPIMAGE-drv check)))))
+ (mbegin %store-monad
+ (built-derivations (list (pk 'APPIMAGE-drv check)))
+ (return (string=? (call-with-input-file (derivation->output-path check)
+ get-string-all)
+ "Hello, world!\n")))))
(unless store (test-skip 1))
(test-assertm "appimage + localstatedir"
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))
(profile -> (profile
- (content (packages->manifest (list %bootstrap-guile hello glibc)))
+ ;; When using '--appimage-extract-and-run', the dynamic
+ ;; linker is necessary, hence glibc below.
+ (content (packages->manifest (list guile-3.0 glibc)))
(hooks '())
(locales? #f)))
- (image (self-contained-appimage "hello-appimage" profile
- #:entry-point "bin/hello"
+ (image (self-contained-appimage "guile-appimage" profile
+ #:entry-point "bin/guile"
#:localstatedir? #t
#:extra-options
'(#:relocatable? #t)))
(check (gexp->derivation
- "check-appimage"
- (with-imported-modules '((guix build utils))
- #~(begin
- (use-modules (ice-9 popen)
- (guix build utils))
- (let ((pipe (open-pipe* OPEN_READ
- #$image "--appimage-extract-and-run")))
- (call-with-output-file #$output
- (lambda (port)
- (dump-port pipe port)))
- (exit (status:exit-val (close-pipe pipe)))))))))
- (built-derivations (list (pk 'APPIMAGE-drv check)))))
+ "check-appimage-with-localstatedir"
+ #~(begin
+ (system* #$image "--appimage-extract-and-run" "-c"
+ (object->string
+ `(call-with-output-file #$output
+ (lambda (port)
+ (display "Hello from Guile!\n"
+ port)))))
+ (execl #$image #$image "--appimage-extract-and-run" "-c"
+ (object->string
+ '(exit
+ (pk 'db? (getcwd)
+ (file-exists? "var/guix/db/db.sqlite")))))))))
+ (mbegin %store-monad
+ (built-derivations (list (pk 'APPIMAGE-drv check)))
+ (return (string=? (call-with-input-file (derivation->output-path check)
+ get-string-all)
+ "Hello from Guile!\n")))))
(unless store (test-skip 1))
(test-assertm "deb archive with symlinks and control files"
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#74670] [PATCH v2 0/2] Fix AppImage tests.
2024-12-03 15:13 [bug#74670] [PATCH] tests: pack: Fix AppImage tests Noé Lopez via Guix-patches via
2024-12-12 21:58 ` Ludovic Courtès
2024-12-12 21:59 ` Ludovic Courtès
@ 2024-12-18 23:58 ` Noé Lopez via Guix-patches
2024-12-18 23:59 ` [bug#74670] [PATCH v2 1/2] pack: Support localstatedir in AppImage format Noé Lopez via Guix-patches
2024-12-19 0:23 ` [bug#74670] [PATCH v3 0/2] tests: pack: Fix AppImage tests Noé Lopez via Guix-patches via
3 siblings, 1 reply; 9+ messages in thread
From: Noé Lopez via Guix-patches @ 2024-12-18 23:58 UTC (permalink / raw)
To: 74670; +Cc: Noé Lopez
From: Noé Lopez <noelopez@free.fr>
Hi,
Thanks you very much for working on the tests, I should have spent more time
on them myself.
> I noticed that the tests were not going very far, so I tried the patch
> below to: (1) check the output of ‘hello’ in the first test, (2) change
> the second test to check for the existence of /var/guix/db/db.sqlite.
>
> The second test doesn’t work though, because where’s that file supposed
> to live? The image is apparently extracted in an unguessable directory,
> so cannot tell where it is. Am I right?
Yes, --appimage-extract-and-run uses a temporary directory but you can use
--appimage-extract which always places the contents in ./squashfs-root.
The other reason the test did not work is because the localstatedir option
wasn’t supported to begin with, this is an oversight that I could have avoided.
I’m sending a second version with the localstatedir support and your updated
tests.
Thanks,
Noé
Noé Lopez (2):
pack: Support localstatedir in AppImage format.
build: pack: Fix unexpected type in assert-utf8-local.
guix/build/pack.scm | 2 +-
guix/scripts/pack.scm | 13 ++++++++++-
tests/pack.scm | 51 ++++++++++++++++++++++++++++---------------
3 files changed, 46 insertions(+), 20 deletions(-)
base-commit: bb8a6f0ac47296d3a18e1e0a26ea3a833eb77c4a
prerequisite-patch-id: f3798629973582541e158d322c1a461038c657b8
--
2.46.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#74670] [PATCH v2 1/2] pack: Support localstatedir in AppImage format.
2024-12-18 23:58 ` [bug#74670] [PATCH v2 0/2] " Noé Lopez via Guix-patches
@ 2024-12-18 23:59 ` Noé Lopez via Guix-patches
0 siblings, 0 replies; 9+ messages in thread
From: Noé Lopez via Guix-patches @ 2024-12-18 23:59 UTC (permalink / raw)
To: 74670
Cc: Noé Lopez, Christopher Baines, Josselin Poiret,
Ludovic Courtès, Mathieu Othacehe, Simon Tournier,
Tobias Geerinckx-Rice
From: Noé Lopez <noe@xn--no-cja.eu>
From: Noé Lopez <noelopez@free.fr>
* guix/scripts/pack.scm (self-contained-appimage): Support localstatedir
option.
* tests/pack.scm: Update tests.
Change-Id: Ibf4758db890b2db0cff4b663fed6564015e347d1
---
guix/scripts/pack.scm | 13 ++++++++++-
tests/pack.scm | 51 ++++++++++++++++++++++++++++---------------
2 files changed, 45 insertions(+), 19 deletions(-)
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index 58cd55b129..61e2da12e7 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -1018,15 +1018,22 @@ (define* (self-contained-appimage name profile
compressor-name
%valid-compressors)))
+ (define database
+ (and localstatedir?
+ (file-append (store-database (list profile))
+ "/db/db.sqlite")))
+
(define builder
(with-extensions (list guile-gcrypt)
(with-imported-modules (source-module-closure
'((guix build store-copy)
- (guix build utils))
+ (guix build utils)
+ (gnu build install))
#:select? not-config?)
#~(begin
(use-modules (guix build utils)
(guix build store-copy)
+ (gnu build install)
(rnrs io ports)
(srfi srfi-1)
(srfi srfi-26))
@@ -1060,6 +1067,10 @@ (define* (self-contained-appimage name profile
(string-append appdir "/" #$name ".desktop")
#:name #$name
#:exec #$entry-point)
+ ;; Install database and gc roots.
+ (when #+database
+ ;; Initialize /var/guix.
+ (install-database-and-gc-roots appdir #+database profile))
;; Compress the AppDir.
(invoke #+(file-append squashfs-tools "/bin/mksquashfs") appdir
squashfs "-root-owned" "-noappend"
diff --git a/tests/pack.scm b/tests/pack.scm
index 2cb643f136..00a8e250ed 100644
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@ -39,9 +39,10 @@ (define-module (test-pack)
#:use-module ((gnu packages package-management) #:select (rpm))
#:use-module ((gnu packages compression) #:select (squashfs-tools))
#:use-module ((gnu packages debian) #:select (dpkg))
- #:use-module ((gnu packages guile) #:select (guile-sqlite3))
+ #:use-module ((gnu packages guile) #:select (guile-sqlite3 guile-3.0))
#:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
#:use-module ((gnu packages linux) #:select (fakeroot))
+ #:use-module ((ice-9 textual-ports) #:select (get-string-all))
#:use-module (srfi srfi-64))
(define %store
@@ -347,7 +348,9 @@ (define rpm-for-tests
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))
(profile -> (profile
- (content (packages->manifest (list %bootstrap-guile hello glibc)))
+ ;; When using '--appimage-extract-and-run', the dynamic
+ ;; linker is necessary, hence glibc below.
+ (content (packages->manifest (list hello glibc)))
(hooks '())
(locales? #f)))
(image (self-contained-appimage "hello-appimage" profile
@@ -366,34 +369,46 @@ (define rpm-for-tests
(lambda (port)
(dump-port pipe port)))
(exit (status:exit-val (close-pipe pipe)))))))))
- (built-derivations (list (pk 'APPIMAGE-drv check)))))
+ (mbegin %store-monad
+ (built-derivations (list (pk 'APPIMAGE-drv check)))
+ (return (string=? (call-with-input-file (derivation->output-path check)
+ get-string-all)
+ "Hello, world!\n")))))
(unless store (test-skip 1))
(test-assertm "appimage + localstatedir"
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))
(profile -> (profile
- (content (packages->manifest (list %bootstrap-guile hello glibc)))
+ ;; When using '--appimage-extract-and-run', the dynamic
+ ;; linker is necessary, hence glibc below.
+ (content (packages->manifest (list guile-3.0 glibc)))
(hooks '())
(locales? #f)))
- (image (self-contained-appimage "hello-appimage" profile
- #:entry-point "bin/hello"
+ (image (self-contained-appimage "guile-appimage" profile
+ #:entry-point "bin/guile"
#:localstatedir? #t
#:extra-options
'(#:relocatable? #t)))
(check (gexp->derivation
- "check-appimage"
- (with-imported-modules '((guix build utils))
- #~(begin
- (use-modules (ice-9 popen)
- (guix build utils))
- (let ((pipe (open-pipe* OPEN_READ
- #$image "--appimage-extract-and-run")))
- (call-with-output-file #$output
- (lambda (port)
- (dump-port pipe port)))
- (exit (status:exit-val (close-pipe pipe)))))))))
- (built-derivations (list (pk 'APPIMAGE-drv check)))))
+ "check-appimage-with-localstatedir"
+ #~(begin
+ (system* #$image "--appimage-extract-and-run" "-c"
+ (object->string
+ `(call-with-output-file #$output
+ (lambda (port)
+ (display "Hello from Guile!\n"
+ port)))))
+ (execl #$image #$image "--appimage-extract" "-c"
+ (object->string
+ '(exit
+ (pk 'db? (getcwd)
+ (file-exists? "squashfs-root/var/guix/db/db.sqlite")))))))))
+ (mbegin %store-monad
+ (built-derivations (list (pk 'APPIMAGE-drv check)))
+ (return (string=? (call-with-input-file (derivation->output-path check)
+ get-string-all)
+ "Hello from Guile!\n")))))
(unless store (test-skip 1))
(test-assertm "deb archive with symlinks and control files"
--
2.46.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#74670] [PATCH v3 0/2] tests: pack: Fix AppImage tests.
2024-12-03 15:13 [bug#74670] [PATCH] tests: pack: Fix AppImage tests Noé Lopez via Guix-patches via
` (2 preceding siblings ...)
2024-12-18 23:58 ` [bug#74670] [PATCH v2 0/2] " Noé Lopez via Guix-patches
@ 2024-12-19 0:23 ` Noé Lopez via Guix-patches via
2024-12-19 0:23 ` [bug#74670] [PATCH v3 1/2] pack: Support localstatedir in AppImage format Noé Lopez via Guix-patches via
2024-12-19 0:23 ` [bug#74670] [PATCH v3 2/2] tests: pack: Improve AppImage tests Noé Lopez via Guix-patches via
3 siblings, 2 replies; 9+ messages in thread
From: Noé Lopez via Guix-patches via @ 2024-12-19 0:23 UTC (permalink / raw)
To: 74670; +Cc: Noé Lopez, Ludovic Courtès
From: Noé Lopez <noelopez@free.fr>
(messed up git in v2)
Hi,
Thanks you very much for working on the tests, I should have spent more time
on them myself.
> I noticed that the tests were not going very far, so I tried the patch
> below to: (1) check the output of ‘hello’ in the first test, (2) change
> the second test to check for the existence of /var/guix/db/db.sqlite.
>
> The second test doesn’t work though, because where’s that file supposed
> to live? The image is apparently extracted in an unguessable directory,
> so cannot tell where it is. Am I right?
Yes, --appimage-extract-and-run uses a temporary directory but you can use
--appimage-extract which always places the contents in ./squashfs-root.
The other reason the test did not work is because the localstatedir option
wasn’t supported to begin with, this is an oversight that I could have avoided
by knowing what I was doing.
I’m sending a second version with the localstatedir support and your updated
tests.
Thanks,
Noé
Noé Lopez (2):
pack: Support localstatedir in AppImage format.
tests: pack: Improve AppImage tests.
guix/scripts/pack.scm | 13 +++++++++-
tests/pack.scm | 60 +++++++++++++++++++++++++++++++++----------
2 files changed, 58 insertions(+), 15 deletions(-)
base-commit: 1a62f687e504c67f26693f3bc60a90e503ab4ea9
--
2.46.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#74670] [PATCH v3 1/2] pack: Support localstatedir in AppImage format.
2024-12-19 0:23 ` [bug#74670] [PATCH v3 0/2] tests: pack: Fix AppImage tests Noé Lopez via Guix-patches via
@ 2024-12-19 0:23 ` Noé Lopez via Guix-patches via
2024-12-19 0:23 ` [bug#74670] [PATCH v3 2/2] tests: pack: Improve AppImage tests Noé Lopez via Guix-patches via
1 sibling, 0 replies; 9+ messages in thread
From: Noé Lopez via Guix-patches via @ 2024-12-19 0:23 UTC (permalink / raw)
To: 74670
Cc: Noé Lopez, Christopher Baines, Josselin Poiret,
Ludovic Courtès, Mathieu Othacehe, Simon Tournier,
Tobias Geerinckx-Rice
From: Noé Lopez <noelopez@free.fr>
* guix/scripts/pack.scm (self-contained-appimage): Support localstatedir
option.
Change-Id: I296b3d3e442aa90f36de62a9b23aba4a2c3de9a0
---
guix/scripts/pack.scm | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index d0e66c3013..7f5a5f2aa7 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -1018,15 +1018,22 @@ (define* (self-contained-appimage name profile
compressor-name
%valid-compressors)))
+ (define database
+ (and localstatedir?
+ (file-append (store-database (list profile))
+ "/db/db.sqlite")))
+
(define builder
(with-extensions (list guile-gcrypt)
(with-imported-modules (source-module-closure
'((guix build store-copy)
- (guix build utils))
+ (guix build utils)
+ (gnu build install))
#:select? not-config?)
#~(begin
(use-modules (guix build utils)
(guix build store-copy)
+ (gnu build install)
(rnrs io ports)
(srfi srfi-1)
(srfi srfi-26))
@@ -1060,6 +1067,10 @@ (define* (self-contained-appimage name profile
(string-append appdir "/" #$name ".desktop")
#:name #$name
#:exec #$entry-point)
+ ;; Install database and gc roots.
+ (when #+database
+ ;; Initialize /var/guix.
+ (install-database-and-gc-roots appdir #+database profile))
;; Compress the AppDir.
(invoke #+(file-append squashfs-tools "/bin/mksquashfs") appdir
squashfs "-root-owned" "-noappend"
--
2.46.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#74670] [PATCH v3 2/2] tests: pack: Improve AppImage tests.
2024-12-19 0:23 ` [bug#74670] [PATCH v3 0/2] tests: pack: Fix AppImage tests Noé Lopez via Guix-patches via
2024-12-19 0:23 ` [bug#74670] [PATCH v3 1/2] pack: Support localstatedir in AppImage format Noé Lopez via Guix-patches via
@ 2024-12-19 0:23 ` Noé Lopez via Guix-patches via
2024-12-23 18:37 ` Ludovic Courtès
1 sibling, 1 reply; 9+ messages in thread
From: Noé Lopez via Guix-patches via @ 2024-12-19 0:23 UTC (permalink / raw)
To: 74670; +Cc: Noé Lopez, Ludovic Courtès
From: Noé Lopez <noelopez@free.fr>
* tests/pack.scm: Improve AppImage tests.
Change-Id: I7890b902f65a2944ae8fa03db8a964deda3c725c
---
tests/pack.scm | 60 ++++++++++++++++++++++++++++++++++++++------------
1 file changed, 46 insertions(+), 14 deletions(-)
diff --git a/tests/pack.scm b/tests/pack.scm
index 1c1e312557..4eac98fbdd 100644
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017-2021, 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017-2021, 2023, 2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2021, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2023 Oleg Pykhalov <go.wigust@gmail.com>
@@ -34,14 +34,15 @@ (define-module (test-pack)
#:use-module ((guix build utils) #:select (%store-directory))
#:use-module (gnu packages)
#:use-module ((gnu packages base) #:select (libc-utf8-locales-for-target
- hello))
+ hello glibc))
#:use-module (gnu packages bootstrap)
#:use-module ((gnu packages package-management) #:select (rpm))
#:use-module ((gnu packages compression) #:select (squashfs-tools))
#:use-module ((gnu packages debian) #:select (dpkg))
- #:use-module ((gnu packages guile) #:select (guile-sqlite3))
+ #:use-module ((gnu packages guile) #:select (guile-sqlite3 guile-3.0))
#:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
#:use-module ((gnu packages linux) #:select (fakeroot))
+ #:use-module ((ice-9 textual-ports) #:select (get-string-all))
#:use-module (srfi srfi-64))
(define %store
@@ -347,36 +348,67 @@ (define rpm-for-tests
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))
(profile -> (profile
- (content (packages->manifest (list %bootstrap-guile hello)))
+ ;; When using '--appimage-extract-and-run', the dynamic
+ ;; linker is necessary, hence glibc below.
+ (content (packages->manifest (list hello glibc)))
(hooks '())
(locales? #f)))
(image (self-contained-appimage "hello-appimage" profile
#:entry-point "bin/hello"
#:extra-options
- (list #:relocatable? #t)))
+ '(#:relocatable? #t)))
(check (gexp->derivation
"check-appimage"
- #~(invoke #$image))))
- (built-derivations (list check))))
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (ice-9 popen)
+ (guix build utils))
+ (let ((pipe (open-pipe* OPEN_READ
+ #$image "--appimage-extract-and-run")))
+ (call-with-output-file #$output
+ (lambda (port)
+ (dump-port pipe port)))
+ (exit (status:exit-val (close-pipe pipe)))))))))
+ (mbegin %store-monad
+ (built-derivations (list (pk 'APPIMAGE-drv check)))
+ (return (string=? (call-with-input-file (derivation->output-path check)
+ get-string-all)
+ "Hello, world!\n")))))
(unless store (test-skip 1))
(test-assertm "appimage + localstatedir"
(mlet* %store-monad
((guile (set-guile-for-build (default-guile)))
(profile -> (profile
- (content (packages->manifest (list %bootstrap-guile hello)))
+ ;; When using '--appimage-extract-and-run', the dynamic
+ ;; linker is necessary, hence glibc below.
+ (content (packages->manifest (list guile-3.0 glibc)))
(hooks '())
(locales? #f)))
- (image (self-contained-appimage "hello-appimage" profile
- #:entry-point "bin/hello"
+ (image (self-contained-appimage "guile-appimage" profile
+ #:entry-point "bin/guile"
#:localstatedir? #t
#:extra-options
- (list #:relocatable? #t)))
+ '(#:relocatable? #t)))
(check (gexp->derivation
- "check-appimage"
+ "check-appimage-with-localstatedir"
#~(begin
- (invoke #$image)))))
- (built-derivations (list check))))
+ (system* #$image "--appimage-extract-and-run" "-c"
+ (object->string
+ `(call-with-output-file #$output
+ (lambda (port)
+ (display "Hello from Guile!\n"
+ port)))))
+ (execl #$image #$image "--appimage-extract"
+ (object->string
+ '(exit
+ (pk 'db? (getcwd)
+ (file-exists? "squashfs-root/var/guix/db/db.sqlite")))))))))
+ (mbegin %store-monad
+ (built-derivations (list (pk 'APPIMAGE-drv check)))
+ (return (string=? (call-with-input-file (derivation->output-path check)
+ get-string-all)
+ "Hello from Guile!\n")))))
(unless store (test-skip 1))
(test-assertm "deb archive with symlinks and control files"
--
2.46.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#74670] [PATCH v3 2/2] tests: pack: Improve AppImage tests.
2024-12-19 0:23 ` [bug#74670] [PATCH v3 2/2] tests: pack: Improve AppImage tests Noé Lopez via Guix-patches via
@ 2024-12-23 18:37 ` Ludovic Courtès
0 siblings, 0 replies; 9+ messages in thread
From: Ludovic Courtès @ 2024-12-23 18:37 UTC (permalink / raw)
To: Noé Lopez; +Cc: 74670
Hi Noé,
Noé Lopez <noe@noé.eu> skribis:
> From: Noé Lopez <noelopez@free.fr>
>
> * tests/pack.scm: Improve AppImage tests.
>
> Change-Id: I7890b902f65a2944ae8fa03db8a964deda3c725c
[...]
> + (system* #$image "--appimage-extract-and-run" "-c"
> + (object->string
> + `(call-with-output-file #$output
> + (lambda (port)
> + (display "Hello from Guile!\n"
> + port)))))
> + (execl #$image #$image "--appimage-extract"
> + (object->string
> + '(exit
> + (pk 'db? (getcwd)
> + (file-exists? "squashfs-root/var/guix/db/db.sqlite")))))))))
The second part here does nothing: you can place any other file name and
it still exits successfully.
Looking at an strace, I think ‘--appimage-extract’ does next to nothing:
essentially it reads /proc/self/exe, create an empty “squashfs-root”
directory, and exits.
Could you check exactly what’s happening?
We’re getting really close!
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 9+ messages in thread