File fix-extracting.patch of Package rpm2docserv
Index: rpm2docserv-20250327.1888603/cmd/rpm2docserv/extractManpages.go
===================================================================
--- rpm2docserv-20250327.1888603.orig/cmd/rpm2docserv/extractManpages.go
+++ rpm2docserv-20250327.1888603/cmd/rpm2docserv/extractManpages.go
@@ -15,7 +15,6 @@
package main
import (
- "bytes"
"compress/gzip"
"errors"
"fmt"
@@ -283,34 +282,40 @@ func unpackRPMs(cacheDir string, tmpdir
}
// XXX rpm packge als rpm.Unpack
- rpm2cpio := exec.Command("rpm2cpio", gv.pkgs[i].Filename)
- cpio := exec.Command("cpio", "-D", unrpmDir,
- "--extract",
- "--unconditional",
- "--preserve-modification-time",
- "--no-preserve-owner",
- "--make-directories")
-
- cpio.Stdin, _ = rpm2cpio.StdoutPipe()
- cpio.Stdout = os.Stdout
- var stderrb bytes.Buffer
- cpio.Stderr = &stderrb
- err = cpio.Start()
+ // rpm2cpio := exec.Command("rpm2cpio", gv.pkgs[i].Filename)
+ // cpio := exec.Command("cpio", "-D", unrpmDir,
+ // "--extract",
+ // "--unconditional",
+ // "--preserve-modification-time",
+ // "--no-preserve-owner",
+ // "--make-directories")
+
+ // cpio.Stdin, _ = rpm2cpio.StdoutPipe()
+ // cpio.Stdout = os.Stdout
+ // var stderrb bytes.Buffer
+ // cpio.Stderr = &stderrb
+ // err = cpio.Start()
+ // if err != nil {
+ // return fmt.Errorf("Error invoking cpio (%s): %v, stderr: %s", filepath.Base(gv.pkgs[i].Filename), err, stderrb.String())
+ // }
+ // err = rpm2cpio.Run()
+ // if err != nil {
+ // return fmt.Errorf("Error invoking rpm2cpio: %v", err)
+ // }
+ // err = cpio.Wait()
+ // if err != nil {
+ // return fmt.Errorf("Error waiting for cpio (%s): %v, stderr: %s", filepath.Base(gv.pkgs[i].Filename), err, stderrb.String())
+ // }
+ bsdtar := exec.Command("bsdtar", "-C", unrpmDir, "-xf", gv.pkgs[i].Filename)
+ // TODO: investigate if we can just unpack the man dir structure and save a lot of temp space, "usr/share/man")
+ bsdtar_output, bsdtar_err := bsdtar.CombinedOutput()
if err != nil {
- return fmt.Errorf("Error invoking cpio (%s): %v, stderr: %s", filepath.Base(gv.pkgs[i].Filename), err, stderrb.String())
- }
- err = rpm2cpio.Run()
- if err != nil {
- return fmt.Errorf("Error invoking rpm2cpio: %v", err)
- }
- err = cpio.Wait()
- if err != nil {
- return fmt.Errorf("Error waiting for cpio (%s): %v, stderr: %s", filepath.Base(gv.pkgs[i].Filename), err, stderrb.String())
+ return fmt.Errorf("Error invoking bsdtar: %v Output: %s", bsdtar_err, bsdtar_output)
}
// If run as non root, make all files read-/writable for the user.
if os.Getuid() != 0 {
- chmod := exec.Command("chmod", "u+rw", "-R", unrpmDir)
+ chmod := exec.Command("chmod", "a+rX,u+w", "-R", unrpmDir)
if err = chmod.Run(); err != nil {
return fmt.Errorf("Error setting u+w permissions: %v", err)
}