Olaf Hering
2013-Jun-04 09:37 UTC
[Libguestfs] [PATCH / RFC] Handle --packager-config in zypp_rpm
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 reposdirin 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@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. *)
Richard W.M. Jones
2013-Jun-04 14:34 UTC
Re: [Libguestfs] [PATCH / RFC] Handle --packager-config in zypp_rpm
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/33d50fbe36a4a1eca5e7b3e3a1dcb2ce68b1a7e6 https://github.com/libguestfs/supermin/commit/bf784ff3fedf37a230915ad3d278d1df22a25715 https://github.com/libguestfs/supermin/commit/e1dda9fde6193cc4cf42f359ee235369314857fa 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
Richard W.M. Jones
2013-Jun-04 16:21 UTC
Re: [Libguestfs] [PATCH / RFC] Handle --packager-config in zypp_rpm
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/33d50fbe36a4a1eca5e7b3e3a1dcb2ce68b1a7e6 > https://github.com/libguestfs/supermin/commit/bf784ff3fedf37a230915ad3d278d1df22a25715 > https://github.com/libguestfs/supermin/commit/e1dda9fde6193cc4cf42f359ee235369314857fa > > 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#)
Possibly Parallel Threads
- [PATCH / RFC] Handle --packager-config in zypp_rpm
- [PATCH] handle --use-installed in zypp driver
- Re: [PATCH] Change fallback name for external supermin helper
- [PATCH] Change fallback name for external supermin helper
- Re: [PATCH] Change fallback name for external supermin helper