This is an attempt to handle a different --reposd-dir in the zypp_rpm
driver. Up to now the system repositories in /etc/zypp/repos.d were
used.
To specify a different set of repositories for zypp a parser for a
simple zypper.conf is added in this patch. It just looks for reposdir=
in section main, like this:
[main]
reposdir=/path/to/other/repofiles
If the config file provided via "--packager-config my_zypp.conf" is
valid the other directory is passed to zypper, otherwise the system
repos.d is used like its done in current code.
Depending on the kind of provided repos, the current code may fail to
import a repo in non-interactive mode. This happens if the repo data are
not properly signed. For this reason the option --no-gpg-checks is added
by this patch.
Finally, the parser uses ocaml-inifiles to read the config file. This is
a new build dependency. inifiles should be available in various
distributions, copies of the original sources can be found via google.
This patch has received some light testing, I sent it out to the list
for further comments. Particular about the new inifiles dependency..
Signed-off-by: Olaf Hering <olaf(a)aepfle.de>
---
src/Makefile.am | 2 +-
src/supermin_zypp_rpm.ml | 23 ++++++++++++++++++++---
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 3b6ca9b..6ed0faf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -56,7 +56,7 @@ OBJECTS = $(XOBJECTS)
BEST = opt
endif
-OCAMLPACKAGES = -package unix,str
+OCAMLPACKAGES = -package unix,str,inifiles
OCAMLFLAGS = -warn-error CDEFLMPSUVXYZ
supermin: $(OBJECTS)
diff --git a/src/supermin_zypp_rpm.ml b/src/supermin_zypp_rpm.ml
index c269aab..c9786ce 100644
--- a/src/supermin_zypp_rpm.ml
+++ b/src/supermin_zypp_rpm.ml
@@ -45,6 +45,7 @@
*)
open Unix
open Printf
+open Inifiles
open Supermin_package_handlers
open Supermin_utils
@@ -54,6 +55,19 @@ open Supermin_cmdline
(* Create a temporary directory for use by all the functions in this file. *)
let tmpdir = tmpdir ()
+let get_repos_dir () =
+ let zypper_default = "/etc/zypp/repos.d" in
+ let parse_repos_dir path =
+ let cfg = new inifile path in
+ let dir = (try cfg#getval "main" "reposdir" with _ ->
zypper_default) in
+ dir
+ in
+ let dir = (match packager_config with None -> zypper_default |
+ Some filename -> (try parse_repos_dir filename with _ -> zypper_default) )
in
+ dir
+
+let repos_dir = get_repos_dir ()
+
let zypp_rpm_detect () =
(file_exists "/etc/SuSE-release") &&
Config.zypper <> "no" && Config.rpm <> "no"
@@ -75,10 +89,11 @@ pkg_cache_dir=%S
time zypper \
%s \
%s \
- --root %S --reposd-dir /etc/zypp/repos.d \
+ --root %S --reposd-dir %S \
--cache-dir \"${cache_dir}\" \
--pkg-cache-dir \"${pkg_cache_dir}\" \
--gpg-auto-import-keys \
+ --no-gpg-checks \
--non-interactive \
install \
--auto-agree-with-licenses \
@@ -92,6 +107,7 @@ time zypper \
(match packager_config with None -> ""
| Some filename -> sprintf "--config %s" filename)
tmp_root
+ repos_dir
in
run_shell sh names;
@@ -129,9 +145,10 @@ unset LANG ${!LC_*}
zypper \
%s \
%s \
- --root %S --reposd-dir /etc/zypp/repos.d \
+ --root %S --reposd-dir %S \
--cache-dir %S \
--gpg-auto-import-keys \
+ --no-gpg-checks \
--non-interactive \
--xml \
install \
@@ -146,7 +163,7 @@ zypper \
(if verbose then "--verbose --verbose" else "--quiet")
(match packager_config with None -> ""
| Some filename -> sprintf "--config %s" filename)
- tmpdir tmpdir (String.concat " " (List.map Filename.quote names)) in
+ tmpdir repos_dir tmpdir (String.concat " " (List.map Filename.quote names))
in
let pkg_names = run_command_get_lines cmd in
(* Return list of package names, remove empty lines. *)
Show replies by date
On Tue, Jun 04, 2013 at 11:37:45AM +0200, Olaf Hering wrote:
Finally, the parser uses ocaml-inifiles to read the config file. This
is
a new build dependency. inifiles should be available in various
distributions, copies of the original sources can be found via google.
Can you try the 3 commits I pushed:
https://github.com/libguestfs/supermin/commit/33d50fbe36a4a1eca5e7b3e3a1d...
https://github.com/libguestfs/supermin/commit/bf784ff3fedf37a230915ad3d27...
https://github.com/libguestfs/supermin/commit/e1dda9fde6193cc4cf42f359ee2...
It should make inifiles optional.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top
On Tue, Jun 04, 2013 at 03:34:13PM +0100, Richard W.M. Jones wrote:
On Tue, Jun 04, 2013 at 11:37:45AM +0200, Olaf Hering wrote:
> Finally, the parser uses ocaml-inifiles to read the config file. This is
> a new build dependency. inifiles should be available in various
> distributions, copies of the original sources can be found via google.
Can you try the 3 commits I pushed:
https://github.com/libguestfs/supermin/commit/33d50fbe36a4a1eca5e7b3e3a1d...
https://github.com/libguestfs/supermin/commit/bf784ff3fedf37a230915ad3d27...
https://github.com/libguestfs/supermin/commit/e1dda9fde6193cc4cf42f359ee2...
It should make inifiles optional.
I checked this on Debian (which has libinifiles-ocaml-dev) and it
works for me.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming blog:
http://rwmj.wordpress.com
Fedora now supports 80 OCaml packages (the OPEN alternative to F#)