Softwareinstallation aus AutoYaST von SuSE/SLES

Mittels (https://www.suse.com/documentation/sles-12/singlehtml/book_autoyast/book_autoyast.html)[AutoYaST] lassen sich bequem Installationen installieren unter Open SuSE bzw. SLES. Wer jedoch nur mal eben auf einem bestehenden System die Software-Pakete nachziehen will, kann es auch anders machen.

Beispiel-Datei, die in diesem Fall einfach "autoyast.xml" heißen soll.

  <software>
    <deploy_image>
      <image_installation config:type="boolean">false</image_installation>
    </deploy_image>
    <image/>
    <instsource/>
   <install_recommended config:type="boolean">true</install_recommended>
    <packages config:type="list">
      <package>SuSEfirewall2</package>
      <package>dhcp-client</package>
      <package>dos2unix</package>
      <package>e2fsprogs</package>
      <package>gcc48-c++</package>
      <package>gcc48-32bit</package>
      <package>gcc-c++</package>
      <package>gcc</package>
      <package>gcc-c++-32bit</package>
      <package>gcc-32bit</package>
      <package>glibc-32bit</package>
      <package>glibc-devel-32bit</package>
      <package>glibc-locale-32bit</package>
      <package>glibc-i18ndata</package>
      <package>glibc</package>
      <package>sysstat</package>
      <package>libstdc++-devel-32bit</package>
      <package>libstdc++-devel</package>
      <package>libstdc++48-devel-32bit</package>
      <package>nfs-client</package>
      <package>ncurses-devel</package>
      <package>openssh</package>
      <package>postfix</package>
      <package>samba-client</package>
      <package>samba</package>
      <package>sles-release</package>
      <package>strace</package>
      <package>sudo</package>
      <package>sysstat</package>
      <package>vim</package>
      <package>zip</package>
    </packages>
    <patterns config:type="list">
      <pattern>Minimal</pattern>
      <pattern>apparmor</pattern>
      <pattern>base</pattern>
    </patterns>
    <remove-packages config:type="list">
      <package>samba-32bit</package>
      <package>samba-libs-32bit</package>
      <package>samba-client-32bit</package>
      <package>MozillaFirefox-translations</package>
      <package>sles-manuals_en</package>
    </remove-packages>
  </software>

Nun besteht die Aufgabe darin, die Einträge unter "" per zypper hinzuzufügen und die Einträge unter "<remove-packages>" zu entfernen. Sicher gibt es sehr schöne Möglichkeiten etwas in der Bash hinzuschmieren; ich nutze dafür jedoch Python. Auf das Parsen von XML verzichte ich an dieser Stelle ganz bewusst, da es hier um Einfachheit und eine schnelle Lösung geht.

#!/usr/bin/env python

import os

isInstall = False
isRemove = False
install = []
remove = []
with open("autoyast.xml") as f:
        for line in f:
                if not isInstall and "<packages " in line:
                        isInstall = True
                        continue

                if not isRemove and "<remove-packages " in line:
                        isRemove = True
                        continue

                if not isInstall and not isRemove: continue
                if isInstall and "</packages>" in line:
                        isInstall = False
                        continue

                if isRemove and "</remove-packages>" in line:
                        isRemove = False
                        continue

                pkg = line[line.find(">") + 1:line.rfind("<")].strip()
                if isInstall: install.append(pkg)
                elif isRemove: remove.append(pkg)


for i in install:
        print("INSTALL: {}".format(i))

cmd = " ".join(install)
cmd = "zypper install " + cmd
print("COMMAND: {}".format(cmd));
os.system(cmd)


for r in remove:
        print("REMOVE:  {}".format(r))

cmd = " ".join(remove)
cmd = "zypper remove " + cmd
print("COMMAND: {}".format(cmd));
os.system(cmd)