Hello community,
here is the log from the commit of package clustduct for openSUSE:Factory checked in at 2019-04-02 09:23:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/clustduct (Old)
and /work/SRC/openSUSE:Factory/.clustduct.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "clustduct"
Tue Apr 2 09:23:25 2019 rev:3 rq:690410 version:0.0.1_alpha7
Changes:
--------
--- /work/SRC/openSUSE:Factory/clustduct/clustduct.changes 2019-02-11 21:23:45.827132893 +0100
+++ /work/SRC/openSUSE:Factory/.clustduct.new.25356/clustduct.changes 2019-04-02 09:23:25.984755311 +0200
@@ -1,0 +2,7 @@
+Mon Apr 1 15:12:53 UTC 2019 - Christian Goll
+
+- Updated to v0.0.1_alpha7 which adds close to every lua file
+ operation (BSC#1131151)
+ * added SLES kiwi descriptions for SLES builds
+
+-------------------------------------------------------------------
Old:
----
clustduct-0.0.1_alpha5.tar.gz
New:
----
clustduct-0.0.1_alpha7.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ clustduct.spec ++++++
--- /var/tmp/diff_new_pack.r2pdym/_old 2019-04-02 09:23:26.408755595 +0200
+++ /var/tmp/diff_new_pack.r2pdym/_new 2019-04-02 09:23:26.412755598 +0200
@@ -12,7 +12,7 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
@@ -22,7 +22,7 @@
%bcond_with pdfdoc
Name: clustduct
-Version: 0.0.1_alpha5
+Version: 0.0.1_alpha7
Release: 0
Summary: Framework which connects a genders database to dnsmasq
License: BSD-3-Clause
@@ -97,6 +97,9 @@
%config %{_sysconfdir}/clustduct.d/
%config %{_sysconfdir}/clustduct.conf
%{_datadir}/doc/%{name}
+%if !%{is_opensuse}
+%exclude %{_datadir}/doc/%{name}/kiwi-descriptions/openSUSE/
+%endif
%exclude %{_datadir}/doc/%{name}/COPYING
%{_libdir}/lua
++++++ clustduct-0.0.1_alpha5.tar.gz -> clustduct-0.0.1_alpha7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/Makefile.am new/clustduct-0.0.1_alpha7/Makefile.am
--- old/clustduct-0.0.1_alpha5/Makefile.am 2019-02-08 12:11:20.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/Makefile.am 2019-04-01 17:10:48.000000000 +0200
@@ -20,23 +20,45 @@
#efidir = $(prefix)/../srv/tftpboot/EFI/x86
#efi_DATA = configs/grub.cfg
-kiwibasedir = $(docdir)/kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS
-kiwibase_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/Dicefile \
+kiwiopensusebasedir = $(docdir)/kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS \
+kiwiopensusebase_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/Dicefile \
kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/config.sh \
kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/config.xml
-kiwirootdir = $(kiwibasedir)/root
-kiwiroot_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/.kiwi_grub_config.trigger
+kiwiopensuserootdir = $(kiwiopensusebasedir)/root
+kiwiopensuseroot_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/.kiwi_grub_config.trigger
-kiwietcdir = $(kiwirootdir)/etc
-kiwietc_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/etc/motd
+kiwiopensuseetcdir = $(kiwiopensuserootdir)/etc
+kiwiopensuseetc_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/etc/motd
-kiwinetdir = $(kiwietcdir)/sysconfig/network
-kiwinet_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/etc/sysconfig/network/ifcfg-lan0 \
+kiwiopensusenetdir = $(kiwiopensuseetcdir)/sysconfig/network
+kiwiopensusenet_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/etc/sysconfig/network/ifcfg-lan0 \
kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/etc/sysconfig/network/dhcp
-kiwiudevdir = $(kiwietcdir)/udev/rules.d/
-kiwiudev_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/etc/udev/rules.d/70-persistent-net.rules
+kiwiopensuseudevdir = $(kiwiopensuseetcdir)/udev/rules.d/
+kiwiopensuseudev_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/etc/udev/rules.d/70-persistent-net.rules
-kiwisystemdir = $(kiwirootdir)/usr/lib/systemd/system/
-kiwisystem_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/usr/lib/systemd/system/grub_config.service
+kiwiopensusesystemdir = $(kiwiopensuserootdir)/usr/lib/systemd/system/
+kiwiopensusesystem_DATA = kiwi-descriptions/openSUSE/x86_64/suse-leap-15.0-JeOS/root/usr/lib/systemd/system/grub_config.service
+
+kiwislesbasedir = $(docdir)/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS \
+kiwislesbase_DATA = kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/Dicefile \
+ kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.sh \
+ kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.xml
+
+kiwislesrootdir = $(kiwislesbasedir)/root
+kiwislesroot_DATA = kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/.kiwi_grub_config.trigger
+
+kiwislesetcdir = $(kiwislesrootdir)/etc
+kiwislesetc_DATA = kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/motd
+
+kiwislesnetdir = $(kiwislesetcdir)/sysconfig/network
+kiwislesnet_DATA = kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/ifcfg-lan0 \
+ kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/dhcp
+
+kiwislesudevdir = $(kiwislesetcdir)/udev/rules.d/
+kiwislesudev_DATA = kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/udev/rules.d/70-persistent-net.rules
+
+kiwislessystemdir = $(kiwislesrootdir)/usr/lib/systemd/system/
+kiwislessystem_DATA = kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/usr/lib/systemd/system/grub_config.service\
+ kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/systemd/system/RegisterFirst.service
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/Salt.md new/clustduct-0.0.1_alpha7/Salt.md
--- old/clustduct-0.0.1_alpha5/Salt.md 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/Salt.md 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,107 @@
+# Configuration management with salt
+## Prerequisites
+Configure a *nfs-server* with following *exports*
+```
+/usr/lib/hpc *(ro,root_squash,sync,no_subtree_check)
+/usr/share/lmod/modulefiles *(ro,root_squash,sync,no_subtree_check)
+/usr/share/lmod/moduledeps *(ro,root_squash,sync,no_subtree_check)
+```
+
+## Salt formulas
+The salt formula */srv/salt/compute-node.sls* is used to configure the compute nodes. The formula has the contents
+```
+nfs-client:
+ pkg.installed: []
+neovim:
+ pkg.installed: []
+lua-lmod:
+ pkg.installed: []
+genders:
+ pkg.installed: []
+
+/usr/lib/hpc:
+ mount.mounted:
+ - device: leap15-clustduct:/usr/lib/hpc
+ - fstype: nfs
+ - mkmnt: True
+ - opts:
+ - defaults
+ - require:
+ - pkg: nfs-client
+
+/usr/share/lmod/modulefiles:
+ mount.mounted:
+ - device: leap15-clustduct:/usr/share/lmod/modulefiles
+ - fstype: nfs
+ - mkmnt: True
+ - opts:
+ - defaults
+ - require:
+ - pkg: nfs-client
+
+/usr/share/lmod/moduledeps:
+ mount.mounted:
+ - device: leap15-clustduct:/usr/share/lmod/moduledeps
+ - fstype: nfs
+ - mkmnt: True
+ - opts:
+ - defaults
+ - require:
+ - pkg: nfs-client
+
+/etc/profile.d/lmod.sh:
+ file.managed:
+ - source: salt://shared_module/lmod.sh
+ - mode: 644
+ - user: root
+ - group: root
+ - require:
+ - pkg: lua-lmod
+
+/etc/profile.d/lmod.csh:
+ file.managed:
+ - source: salt://shared_module/lmod.csh
+ - mode: 644
+ - user: root
+ - group: root
+ - require:
+ - pkg: lua-lmod
+
+/etc/genders:
+ file.managed:
+ - contents_pillar: genders:database
+ - mode: 644
+ - user: root
+ - group: root
+ - require:
+ - pkg: genders
+```
+and the definition for the node as *srv/salt/top.sls*
+```
+base:
+ 'compute-[0-2][0-9].cluster.suse':
+ - compute-node
+
+```
+we also have to create the configuration files for *lua-lmod* with
+```
+mkdir /srv/salt/shared_module
+cp /etc/profile.d/lmod* /srv/salt/shared_module
+```
+and create a pillar for distributing the genders database by creating the file `/srv/pillar/top.sls` with the content
+```
+base:
+ '*':
+ - genders
+```
+and the genders pillar `/srv/pillar/genders.sls`
+```
+genders:
+ database: |
+ {{ salt['cmd.run']('nodeattr --expand' ) | indent(8) }}
+```
+Now accept the key with
+```
+salt-key -A
+```
+and the node should install the rest.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/Usage.md new/clustduct-0.0.1_alpha7/Usage.md
--- old/clustduct-0.0.1_alpha5/Usage.md 2019-02-08 12:11:20.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/Usage.md 2019-04-01 17:10:48.000000000 +0200
@@ -1,68 +1,81 @@
# Bare metal deployment with dnsmasq and kiwi
-Currently it is not possible to deploy the openSUSE/SUSE HPC product on bare metal without a third party tool. `clustduct` provides this possibility.
+If a smaller clusters should be deployed on bare metal with `clustduct`, following prerequisites must be met:
-## Used software
-For the bare metal provisioning, we need the following software packages:
+ * internet access
+ * separate network without an active dhcp server
+ * *gateway* of the *cluster network*
+ * *DNS* server outside of the cluster network
- * **dnsmasq** in for dhpc, dns and tftp management
- * **kiwi-ng** for creating stateful (installation on disk) and stateless installs
- * **genders** as central database tool and format
- * **syslinux** providing the necessary pxe boot infrastructure
- * **clustduct** which connects dnsmasq with genders
-
-Additional purpose beyond bare metal provision may depend on following packages:
-
- * **slurm** as workload manager
- * **salt** for node configuration
- * **powerman** for management of the physical machines
-
-## Quick start guide
-### Prerequisites
-This software was tested with a *openSuSE Leap 15.0* which has the following prerequisites:
- * no firewall
- * sshd running
- * no apparmor
- * static ip address
+In this setup one node, from now on called *managment server*, provides *DNS* and *dhcp* information to the other nodes, called *compute nodes*. The *managment server* is also used to generate images with *kiwi* and provide them to the *compute nodes*.
-#### Disable apparmor
-In some profiles, **apparmor** is installed and has a preconfigured profile for dnsmasq. This must be disabled which can be done in two ways. You can
+## Table of used values
- * disable apparmor service with
+Key | Example value | Used value
+----|---------------|----------------
+*cluster network* | 192.168.100.0/24 | ___________
+*gateway* | 192.168.100.1 |___________
+*DNS server* | 192.168.100.1 |___________
+*dynamic range* | 192.168.100.50-60 |___________
+*static address* | 192.168.100.254 |___________
+*domain* | cluster.suse |___________
+
+## Setup of *managment server*
+The *managment server* can be installed via the *HPC Managment Server (Head Node)* role, but other means of setup are also possible.
+
+After the installation of the package `clustduct`, all necessary components are available.
+Following services must be **disabled**
+
+ * firewall
+ * apparmor
+
+Following packages must be installed:
+
+ * python3-kiwi
+ * tftp.socket
+
+Following services must be **enabled** and **running**
+
+ * sshd
+ * tftp
+
+Following service must be **enabled**
+
+ * dnsmasq
+
+Furthermore, set up a static IP address.
+
+ * static ip address
-```
-systemctl disable apparmor.service
-```
-and reboot the machine, or
- * disable the profile with
+NOTE: Disable apparmor
+In some profiles, `apparmor` is installed and has a preconfigured profile for `dnsmasq`. It must be disabled which can be done in two ways.
+
+ * The profile for `dnsmasq` can be disabled with
```
aa-disable /etc/apparmor.d/usr.sbin.dnsmasq
```
-##### Note
-Disabling the **apparmor** profile introduces some security issues, which we are ignoring at the moment.
+ * or the `apparmor` service can be disabled with
-### Software installation with prepackaged `clustduct`
-In the first step the repository of clustuct is added and the package is installed
```
-zypper ar \
-https://download.opensuse.org/repositories/home:/mslacken:/prov/\
-openSUSE_Leap_15.0/home:mslacken:prov.repo
-zypper ref
-zypper in clustduct
+systemctl disable apparmor.service
```
-### Dnsmasq configuration
-In the dnsmasq configuration file `/etc/dnsmasq.conf`, the following options have to be changed:
+ afterwards the machine must be rebooted.
- * the local domain:
+WARNING: Disabling the `apparmor` profile introduces security issues which can be ignored as the *cluster network* is assumed to be a protected network.
+
+## Dnsmasq configuration
+The package *clustduct* contains also an example configuration for *dnsmasq* in `/usr/share/doc/clustduct/dnsmasq.example` which has following differences to shipped *dnsmasq* configuration:
+
+ * local domain (modify to your needs)
```
local=/cluster.suse/
```
- * if an additional dynamic range is wanted:
+ * dynamic range
```
-dhcp-range=192.168.100.50,192.168.100.60,12h
+dhcp-range=192.168.100.50,192.168.100.60,12h (modify to your needs)
```
- * image deployment via *tftp* has to enabled via
+ * tftp enabled and deployment directory
```
enable-tftp
tftp-root=/srv/tftpboot/
@@ -71,7 +84,7 @@
```
dhcp-boot=pxelinux.0
```
- * connect dnsmasq the genders database via `clustduct`
+ * *clustduct* script
```
dhcp-script=/usr/sbin/clustduct.sh
```
@@ -79,298 +92,58 @@
```
read-ethers
```
- * run dnsmasq as root (will change in the future)
+ * `dnsmasq` is executed as root
```
user=root
group=root
```
- * the default route might also be set with
+ * *gateway* for the *cluster network*
```
-dhcp-option=option:router,192.168.100.1
+dhcp-option=option:router,192.168.100.1 (modify to your needs)
```
+Once dnsmasq has been configured, it may be (re)started.
+## `genders` databases for the node configuration
+The genders database connects the *mac* addresses of the *compute nodes* with the *ip* address and the corresponding FQDN . A flat file in `/etc/genders` is used as database. If the mac addresses of the hosts are known they could also be added before the node installation, if not they can be set during the boot process or, depending on the configuration, will be added in linear manner.
-
-### Genders databases configuration for the nodes
-Now the cluster nodes have to be defined by creating a genders database for them. The genders database, a flat file in `/etc/genders`, must contain for every node a new line with the *ip*-attribute which will be used as ip address for the compute node. If the mac addresses of the hosts are known they could also be added now if not they can be set on the pxe boot menu or will be added on the node boot up.
+### Adding known `mac` addresses to `genders`
+Previosily known `mac` addresses of nodes can be added to the database by adding a single line whic contains the node name and mac address to the file `/etc/genders`. The format must be like
```
-compute-01 ip=192.168.100.11
-compute-02 ip=192.168.100.12
-compute-03 ip=192.168.100.13,mac=aa:bb:cc:dd:ee:ff
+NODENAME mac=$MACADDRESS
```
-A basic database can be created with the command
+## JeOS leap 15.0 image creation
+Descriptions for creating images can be found under the directory
```
-for i in $(seq 1 20); do echo "compute-$(printf %02g $i) ip=192.168.100.$(($i+10))"; done > /etc/genders
+/usr/share/doc/clustduct/kiwi-descriptions/[open]SUSE/
```
-For booting the node there must also be entries in the genders database. Boot from local disk can allowed by adding following entry to `/etc/genders`
-```
-local menu=label\wsboot\wsfrom\wslocal\wsdisk,com32=chain.c32,append=hd0,mandatoryentry
-
-```
-For creating the boot entries for every node call the command
-```
-/usr/sbin/clustduct.sh pxemenu
-```
-and populate the file */etc/hosts/* with
-```
-/usr/sbin/clustduct.sh init
-```
-#### NOTE
-The genders database must not have have spaces, thus we use *\\ws* instead. Also the equal character *=* is interpreted, so we use *\\ws* instead.
-
-When the keyword *mandatoryentry* is used, a boot entry for this 'image' for every node is created.
-
-
-
-
-### JeOS leap 15.0 image creation
-Kiwi must be installed with
-```
-zypper in python3-kiwi
-```
-For the creation of boot images, do the following
-```
-git clone https://github.com/SUSE/kiwi-descriptions
-```
-which are the descriptions for creating the node images. Second, archive the `clustduct` script which provides the connection between the **genders** database and **dnsmasq** is needed.
-```
-git clone https://github.com/mslacken/clustduct.git
-```
-The previously downloaded kiwi descriptions allow an easy creation of images for installing the compute nodes. The configuration for the JeOS Leap 15.0 can be found under
-```
-kiwi-descriptions/suse/x86_64/suse-leap-15.0-JeOS/config.xml
-```
-For an installation on the hard disk, the following line must be changed from
-```
-installiso="true"
-```
-to
-```
-installpxe="true"
-```
-For easy deployment to the section `<oemconfig>` the entry
-```
-<oem-unattended>true</oem-unattended>
-```
-is added and as well the packgage *salt-minion* is added in the section `<packages type="image">` with
-```
-<package name="salt-minion"/>
-```
-
-Now the image can be prepared with
+The install image is prepared with
```
+cd /usr/share/doc/clustduct
kiwi-ng --type oem system prepare\
---description kiwi-descriptions/suse/x86\_64/suse-leap-15.0-JeOS \
+--description kiwi-descriptions/suse/x86_64/suse-leap-15.0-JeOS \
--root /tmp/leap15_oem_pxe
```
-As a root image now exists, we can easily make some minor modifications there, like copying the ssh-key, enable the *salt-minion* with
-```
-systemctl --root /tmp/leap15_oem_pxe enable salt-minion
-```
-and configured by adding following two lines to the file */tmp/leap15_oem_pxe/etc/salt/minion*
-```
-master: leap15-clustduct.cluster.suse
-startup_states: highstate
-```
-As the hostname should be updated by *dhcp* we have to enable this by setting
-```
-DHCLIENT_SET_HOSTNAME="yes"
-```
-in the file */tmp/leap15_oem_pxe/etc/sysconfig/network/dhcp*
-
-In order to serve this image, it has to be packed with the command
+Now the root file system for the new nodes is available under `/tmp/leap15_oem_pxe` and simple modifications can be made to it, but they will be lost if a new system is created via the `kiwi-ng system prepare` command. To install the *compute nodes* the image has to be packed. This is done with the commands:
```
mkdir /tmp/packed_image
-kiwi --type=oem system create --root=/tmp/leap15_oem_pxe \
+kiwi-ng --type=oem system create --root=/tmp/leap15_oem_pxe \
--target-dir=/tmp/packed_image
```
-To send the images to the nodes, the right location must created with
+
+## Preparing the *tftboot* directory
+For the deployment of the *compute nodes* the *tftpboot* directory `/srv/tftpboot` must be prepared with the command
+```
+prepare-tftp.sh
+```
+which installs the necessary files for booting and installing the *compute nodes* over the network via *PXE* or *UEFI*. Finally the directory which holds the image for the *compute nodes* must be created with
```
mkdir -p /srv/tftpboot/leap15/
```
-now extract image to the directory with
+and the previously packed image extracted to
```
cd /srv/tftpboot/leap15/
tar xJf /tmp/packed_image/LimeJeOS-Leap-15.0.x86_64-1.15.0.install.tar.xz
```
-To make the image available in genders add following two lines to */etc/genders*
-```
-JeOS15 APPEND=initrd\eq/leap15/pxeboot.initrd.xz\wsrd.kiwi.install.pxe\ws\
-rd.kiwi.install.image\eqtftp://192.168.100.254/leap15/LimeJeOS-Leap-15.0.xz,\
-KERNEL=/leap15/LimeJeOS-Leap-15.0.kernel
-compute-[01-20] bootimage=JeOS15
-```
-and flatten/re-create the genders database and the boot structure with
-```
-/usr/sbin/clustduct.sh clean
-/usr/sbin/clustduct.sh pxemenu
-```
-# Configuration management with salt
-## Prerequisites
-Configure a *nfs-server* with following *exports*
-```
-/usr/lib/hpc *(ro,root_squash,sync,no_subtree_check)
-/usr/share/lmod/modulefiles *(ro,root_squash,sync,no_subtree_check)
-/usr/share/lmod/moduledeps *(ro,root_squash,sync,no_subtree_check)
-```
-
-## Salt formulas
-The salt formula */srv/salt/compute-node.sls* is used to configure the compute nodes. The formula has the contents
-```
-nfs-client:
- pkg.installed: []
-neovim:
- pkg.installed: []
-lua-lmod:
- pkg.installed: []
-genders:
- pkg.installed: []
-
-/usr/lib/hpc:
- mount.mounted:
- - device: leap15-clustduct:/usr/lib/hpc
- - fstype: nfs
- - mkmnt: True
- - opts:
- - defaults
- - require:
- - pkg: nfs-client
-
-/usr/share/lmod/modulefiles:
- mount.mounted:
- - device: leap15-clustduct:/usr/share/lmod/modulefiles
- - fstype: nfs
- - mkmnt: True
- - opts:
- - defaults
- - require:
- - pkg: nfs-client
-
-/usr/share/lmod/moduledeps:
- mount.mounted:
- - device: leap15-clustduct:/usr/share/lmod/moduledeps
- - fstype: nfs
- - mkmnt: True
- - opts:
- - defaults
- - require:
- - pkg: nfs-client
-
-/etc/profile.d/lmod.sh:
- file.managed:
- - source: salt://shared_module/lmod.sh
- - mode: 644
- - user: root
- - group: root
- - require:
- - pkg: lua-lmod
-
-/etc/profile.d/lmod.csh:
- file.managed:
- - source: salt://shared_module/lmod.csh
- - mode: 644
- - user: root
- - group: root
- - require:
- - pkg: lua-lmod
-
-/etc/genders:
- file.managed:
- - contents_pillar: genders:database
- - mode: 644
- - user: root
- - group: root
- - require:
- - pkg: genders
-```
-and the definition for the node as *srv/salt/top.sls*
-```
-base:
- 'compute-[0-2][0-9].cluster.suse':
- - compute-node
-
-```
-we also have to create the configuration files for *lua-lmod* with
-```
-mkdir /srv/salt/shared_module
-cp /etc/profile.d/lmod* /srv/salt/shared_module
-```
-and create a pillar for distributing the genders database by creating the file `/srv/pillar/top.sls` with the content
-```
-base:
- '*':
- - genders
-```
-and the genders pillar `/srv/pillar/genders.sls`
-```
-genders:
- database: |
- {{ salt['cmd.run']('nodeattr --expand' ) | indent(8) }}
-```
-Now accept the key with
-```
-salt-key -A
-```
-and the node should install the rest.
-## Bug
-The genders database must be readable by salt, change this with
-```
-chmod 644 /etc/genders
-```
-
-# Deprecated Info
-### pxe boot structure
-The initial menu for pxe boot has created with the file */srv/tftpboot/pxelinux.cfg/default* with the content
-```
-DEFAULT menu
-PROMPT 0
-MENU TITLE Hombrew pxe boot
-
-LABEL ClustDuct
- MENU LABEL Boot as node ...
- KERNEL menu.c32
- APPEND clustduct/clustduct-nodes
-
-
-```
-For proper functionality, the necessary components of the *syslinux* package has to copied to the *tftpboot* dir
-```
-cp /usr/share/syslinux/chain.c32 /usr/share/syslinux/menu.c32 /usr/share/syslinux/pxelinux.0 \
-/usr/share/syslinux/reboot.c32 /srv/tftpboot/
-```
-### image/boot entries in genders
-Boot entries for the nodes will also be created from the genders database. Entries must have the following form
-
-```
-JeOS15.0 APPEND=initrd\eq/leap15/pxeboot.initrd.xz\wsrd.kiwi.install.pxe\wsrd.kiwi.install.image=tftp://192.168.100.253/leap15/LimeJeOS-Leap-15.0.xz,KERNEL=/leap15/LimeJeOS-Leap-15.0.kernel
-local MENU=DEFAULT,APPEND=hd0,COM32=chain.c32,MENU=LABEL\ws(local\wsboot)
-```
-
-### Create pxe boot structure
-The pxe boot structure can be created with the command
-```
-clustduct pxemenu
-```
-### Deployment of the nodes
-Simply start dnsmasq with
-```
-systemctl enable dnsmasq
-systemctl start dnsqmasq
-```
-## Running clusduct as non root user
-For non root functionality of dnsmasq we have to the change the attributes of following files
-```
-chgrp tftp /etc/hosts
-chmod g+w /etc/hosts
-chgrp tftp /etc/ethers
-chmod g+w /etc/ethers
-```
-jkljlk
-```
-kiwi-ng --type oem system build \
---description kiwi-descriptions/suse/x86\_64/suse-leap-15.0-JeOS \
---target-dir /tmp/myimage_oem_pxe
-```
-
+it.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/doc/genders.example new/clustduct-0.0.1_alpha7/doc/genders.example
--- old/clustduct-0.0.1_alpha5/doc/genders.example 2019-02-08 12:11:20.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/doc/genders.example 2019-04-01 17:10:48.000000000 +0200
@@ -14,7 +14,10 @@
#
# example for kiwi generated install entry
#
-JeOS15 initrd=/leap15/pxeboot.initrd.xz,append=rd.kiwi.install.pxe\wsrd.kiwi.install.image\eqtftp://192.168.100.254/leap15/LimeJeOS-Leap-15.0.xz,kernel=/leap15/LimeJeOS-Leap-15.0.kernel,nextboot=local,trigger=LimeJeOS-Leap-15.0.xz
+# openSUSE Leap15 example entry
+#JeOS15 initrd=/leap15/pxeboot.initrd.xz,append=rd.kiwi.install.pxe\wsrd.kiwi.install.image\eqtftp://192.168.100.254/leap15/LimeJeOS-Leap-15.0.xz,kernel=/leap15/LimeJeOS-Leap-15.0.kernel,nextboot=local,trigger=LimeJeOS-Leap-15.0.xz
+# SLES-15 example entry
+#SLE15 initrd=/sles15/pxeboot.initrd.xz,append=rd.kiwi.install.pxe\wsrd.kiwi.install.image\eqtftp://192.168.100.254/sles15/LimeJeOS-SLE-15.0.xz,kernel=/sles15/LimeJeOS-SLE-15.0.kernel,nextboot=local,trigger=LimeJeOS-SLE-15.0.xz
#
# local boot entry
#
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/Dicefile new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/Dicefile
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/Dicefile 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/Dicefile 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,3 @@
+Dice.configure do |config|
+ config.buildhost = :DOCKER
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.sh new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.sh
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.sh 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,88 @@
+#!/bin/bash
+#================
+# FILE : config.sh
+#----------------
+# PROJECT : OpenSuSE KIWI Image System
+# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
+# :
+# AUTHOR : Marcus Schaefer
+# :
+# BELONGS TO : Operating System images
+# :
+# DESCRIPTION : configuration script for SUSE based
+# : operating systems
+# :
+# :
+# STATUS : BETA
+#----------------
+#======================================
+# Functions...
+#--------------------------------------
+test -f /.kconfig && . /.kconfig
+test -f /.profile && . /.profile
+
+#======================================
+# Greeting...
+#--------------------------------------
+echo "Configure image: [$kiwi_iname]..."
+
+#======================================
+# Mount system filesystems
+#--------------------------------------
+baseMount
+
+#======================================
+# Setup baseproduct link
+#--------------------------------------
+suseSetupProduct
+
+#======================================
+# Add missing gpg keys to rpm
+#--------------------------------------
+suseImportBuildKey
+
+#======================================
+# Activate services
+#--------------------------------------
+suseInsertService sshd
+suseInsertService RegisterFirst
+if [[ ${kiwi_type} =~ oem|vmx ]];then
+ suseInsertService grub_config
+else
+ suseRemoveService grub_config
+fi
+
+#======================================
+# Setup default target, multi-user
+#--------------------------------------
+baseSetRunlevel 3
+
+#==========================================
+# remove package docs
+#------------------------------------------
+rm -rf /usr/share/doc/packages/*
+rm -rf /usr/share/doc/manual/*
+rm -rf /opt/kde*
+
+#======================================
+# only basic version of vim is
+# installed; no syntax highlighting
+#--------------------------------------
+sed -i -e's/^syntax on/" syntax on/' /etc/vimrc
+
+#======================================
+# SuSEconfig
+#--------------------------------------
+suseConfig
+
+#======================================
+# Remove yast if not in use
+#--------------------------------------
+suseRemoveYaST
+
+#======================================
+# Umount kernel filesystems
+#--------------------------------------
+baseCleanMount
+
+exit 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.xml new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.xml
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.xml 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/config.xml 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<image schemaversion="6.8" name="LimeJeOS-SLE-15">
+ <description type="system">
+ <author>Christian Goll</author>
+ <contact>cgoll@suse.de</contact>
+ <specification>
+ SUSE HPC 15 JeOS, is a small text based image
+ </specification>
+ </description>
+ <preferences>
+ <version>1.15.0</version>
+ <packagemanager>zypper</packagemanager>
+ <locale>en_US</locale>
+ <keytable>us</keytable>
+ <timezone>Europe/Berlin</timezone>
+ <rpm-excludedocs>true</rpm-excludedocs>
+ <rpm-check-signatures>false</rpm-check-signatures>
+ <bootsplash-theme>SLE</bootsplash-theme>
+ <bootloader-theme>SLE</bootloader-theme>
+ </preferences>
+ <preferences>
+ <type image="vmx" filesystem="ext4" bootloader="grub2" kernelcmdline="splash" firmware="efi" format="qcow2">
+ <size>
+ 32768
+ </size>
+ </type>
+ <type image="oem" filesystem="ext4" initrd_system="dracut" installpxe="true" bootloader="grub2" kernelcmdline="splash" firmware="efi">
+ <oemconfig>
+ <oem-systemsize>2048</oem-systemsize>
+ <oem-swap>true</oem-swap>
+ <oem-device-filter>/dev/ram</oem-device-filter>
+ <oem-multipath-scan>false</oem-multipath-scan>
+ <oem-unattended>true</oem-unattended>
+ </oemconfig>
+ <machine memory="512" guestOS="suse" HWversion="4">
+ <vmdisk id="0" controller="ide"/>
+ <vmnic driver="e1000" interface="0" mode="bridged"/>
+ </machine>
+ </type>
+ </preferences>
+ <users>
+ <!-- password is linux -->
+ <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root" groups="root"/>
+ </users>
+ <repository type="rpm-md" alias="kiwi" priority="1">
+ <source path="obs://Virtualization:Appliances:Builder/SLE_15"/>
+ </repository>
+ <repository type="yast2" alias="SLES_installer">
+ <source path="iso:// /root/SLE-15-Installer-DVD-x86_64-GA-Media1.iso"/>
+ </repository>
+ <repository type="yast2" alias="SLES_packages">
+ <source path="iso:// /root/SLE-15-Packages-x86_64-GA-Media1.iso"/>
+ </repository>
+
+ <packages type="image">
+ <package name="checkmedia"/>
+ <package name="patterns-base-minimal_base"/>
+ <package name="plymouth-branding-SLE"/>
+ <package name="plymouth-dracut"/>
+ <package name="plymouth"/>
+ <package name="grub2-branding-SLE-15"/>
+ <package name="iputils"/>
+ <package name="vim"/>
+ <package name="grub2"/>
+ <package name="grub2-x86_64-efi" arch="x86_64"/>
+ <package name="grub2-i386-pc"/>
+ <package name="syslinux"/>
+ <package name="fontconfig"/>
+ <package name="fonts-config"/>
+ <package name="tar"/>
+ <package name="openssh"/>
+ <package name="iproute2"/>
+ <package name="less"/>
+ <package name="lvm2"/>
+ <package name="psmisc"/>
+ <package name="parted"/>
+ <package name="bash-completion"/>
+ <package name="dhcp-client"/>
+ <package name="which"/>
+ <package name="udev"/>
+ <package name="salt-minion"/>
+ <package name="shim"/>
+ <package name="systemd"/>
+ <package name="systemd-sysvinit"/>
+ <package name="dracut"/>
+ <package name="kernel-default"/>
+ <package name="timezone"/>
+ <package name="SLE_HPC-release"/>
+ <package name="SUSEConnect"/>
+ <package name="suse-build-key"/>
+ <package name="sle-module-basesystem-release"/>
+ </packages>
+ <packages type="oem">
+ <package name="dracut-kiwi-oem-repart"/>
+ <package name="dracut-kiwi-oem-dump"/>
+ </packages>
+ <packages type="bootstrap">
+ <package name="udev"/>
+ <package name="filesystem"/>
+ <package name="glibc-locale"/>
+ <package name="cracklib-dict-full"/>
+ <package name="ca-certificates"/>
+ <package name="SLE_HPC-release"/>
+ <package name="sle-module-basesystem-release"/>
+ </packages>
+</image>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/motd new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/motd
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/motd 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/motd 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,7 @@
+This is the Leap 15.0 JeOS SuSE Linux System.
+To upgrade your system call:
+
+ zypper refresh
+ zypper up
+
+Have a lot of fun...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/dhcp new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/dhcp
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/dhcp 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/dhcp 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,381 @@
+## Type: list(enabled,disabled,default,)
+## Default: ""
+#
+# Default is to use the FQDN option, when the DHCLIENT_HOSTNAME_OPTION
+# variable is set to a full hostname, that is, when it contains a dot.
+# When DHCLIENT_HOSTNAME_OPTION is set to AUTO, short hostname from
+# /etc/hostname is send via hostname option 12 (same as SLES-11).
+#
+DHCLIENT_FQDN_ENABLED=""
+
+## Type: list(both,ptr,none,)
+## Default: ""
+#
+# Request to update A and PTR or only the PTR DNS records using the
+# hostname specified in DHCLIENT_HOSTNAME_OPTION variable.
+# Default is to update 'both' when hostname is set or 'none' when
+# the hostname is empty and DHCLIENT_FQDN_ENABLED is set to enabled.
+#
+DHCLIENT_FQDN_UPDATE=""
+
+## Type: yesno
+## Default: yes
+#
+# Qualify relative sub-domains/hostname in the DHCLIENT_HOSTNAME_OPTION
+# variable adding a final dot ('foo.bar' -> 'foo.bar.').
+# When disabled, the DHCP server may append it's update domain to the
+# hostname (e.g. 'foo.bar' -> 'foo.bar.example.net').
+#
+DHCLIENT_FQDN_QUALIFY="yes"
+
+## Type: yesno
+## Default: yes
+#
+# The FQDN option is encoding hostnames using canonical DNS wire format
+# by default. This flag permits to enable use of the deprecated ascii
+# format limited to a single label (host hostname) for compatibility
+# purposes with draft implementation, which may be unsupported and cause
+# that a DHCP server ignores the fqdn option request completely.
+#
+DHCLIENT_FQDN_ENCODE="yes"
+
+## Type: list(,default,none,all,dns,ntp,nis,tz,boot,smb,nds,slp,sip,log)
+## Default: ""
+#
+# This variable permits to specify a space separated list of build-in
+# facility names supported by the dhcp4 client modifying the default
+# options used in requests and to update system settings (via netconfig).
+#
+# When empty, default settings configured in wicked-config(5) or built-in
+# defaults are used. The special "default", "all", and "none" sets enable
+# to request none, the built-in default set or all supported options,
+# respectively. A "no-" or "-" in the front of a facility name permit to
+# remove/disable it from the currently applied set, e.g. "default,-nis"
+# disables request for nis options.
+# More specific variables as DHCLIENT_SET_DEFAULT_ROUTE,_SET_HOSTNAME or
+# the MTU option have higher precedence.
+#
+DHCLIENT_UPDATE=""
+
+## Type: list(enabled,disabled,default,)
+## Default: ""
+#
+# Default is to use the FQDN option, when the DHCLIENT6_HOSTNAME_OPTION
+# variable provides a hostname.
+# When DHCLIENT6_HOSTNAME_OPTION is set to AUTO, short hostname from the
+# /etc/hostname file is send (same to SLES-11).
+#
+DHCLIENT6_FQDN_ENABLED=""
+
+## Type: list(both,ptr,none,)
+## Default: ""
+#
+# Request to update AAAA and PTR or only the PTR DNS records using the
+# hostname specified in DHCLIENT6_HOSTNAME_OPTION variable.
+# Default is to update \fIboth\fR when hostname is given or \fInone\fR
+# when hostname is empty and DHCLIENT6_FQDN_ENABLED is set to enabled.
+#
+DHCLIENT6_FQDN_UPDATE=""
+
+## Type: yesno
+## Default: yes
+#
+# Qualify relative sub-domains/hostname in the DHCLIENT6_HOSTNAME_OPTION
+# variable adding a final dot ('foo.bar' -> 'foo.bar.').
+# When disabled, the DHCP server may append it's update domain to the
+# hostname (e.g. 'foo.bar' -> 'foo.bar.example.net').
+#
+DHCLIENT6_FQDN_QUALIFY="yes"
+
+## Type: list(,default,none,all,dns,ntp,tz,boot,nis,sip)
+## Default: ""
+#
+# This variable permits to specify a space separated list of build-in
+# facility names supported by the dhcp6 client modifying the default
+# options used in requests and to update system settings (via netconfig).
+#
+# When empty, default settings configured in wicked-config(5) or built-in
+# defaults are used. The special "default", "all", and "none" sets enable
+# to request none, the built-in default set or all supported options,
+# respectively. A "no-" or "-" in the front of a facility name permit to
+# remove/disable it from the currently applied set, e.g. "default,-nis"
+# disables request for nis options.
+# The more specific variable DHCLIENT6_SET_HOSTNAME has higher precedence.
+#
+DHCLIENT6_UPDATE=""
+## Path: Network/DHCP/DHCP client
+## Description: DHCPv4 client configuration variables
+#
+# Note:
+# To configure one or more interfaces for DHCP configuration, you have to
+# change the BOOTPROTO variable in /etc/sysconfig/network/ifcfg-<interface>
+# to 'dhcp' (and possibly set STARTMODE='onboot').
+#
+# Most of the options can and should be overridden by per-interface
+# settings in the ifcfg-* files.
+#
+# Note: NetworkManager is not using any sysconfig settings.
+#
+
+## Type: yesno
+## Default: no
+#
+# Should the DHCPv4 client set the hostname? (yes|no)
+#
+# When it is likely that this would occur during a running X session,
+# your DISPLAY variable could be screwed up and you won't be able to open
+# new windows anymore, then this should be "no".
+#
+# If it happens during booting it won't be a problem and you can
+# safely say "yes" here. For a roaming notebook with X kept running, "no"
+# makes more sense.
+#
+DHCLIENT_SET_HOSTNAME="yes"
+
+## Type: string
+## Default: AUTO
+#
+# Specifies the hostname option field when DHCPv4 client sends messages.
+# Some DHCP servers will update nameserver entries (dynamic DNS) to it.
+# Also, some DHCP servers, notably those used by @Home Networks, require
+# the hostname option field containing a specific string in the DHCP
+# messages from clients.
+#
+# When set to "AUTO", the current hostname from /etc/hostname is sent.
+# Use this variable to override it with another hostname, or leave it
+# empty to not send any hostname.
+#
+DHCLIENT_HOSTNAME_OPTION="AUTO"
+
+## Type: yesno
+## Default: yes
+#
+# Should the DHCP client set a default route (default Gateway) (yes|no)
+#
+# When multiple copies of dhcp client run, it would make sense that only
+# one of them does it.
+#
+DHCLIENT_SET_DEFAULT_ROUTE="yes"
+
+## Type: integer
+## Default: "0"
+#
+# This option allows to set a metrics/priority for DHCPv4 routes.
+#
+DHCLIENT_ROUTE_PRIORITY="0"
+
+## Type: string
+## Default: ""
+#
+# specify a client ID
+#
+# Specifies a client identifier string. By default an id derived from the
+# hardware address of the network interface is sent as client identifier.
+#
+DHCLIENT_CLIENT_ID=""
+
+## Type: string
+## Default: ""
+#
+# Specifies the vendor class identifier string. The default is dhcp client
+# specific.
+#
+DHCLIENT_VENDOR_CLASS_ID=""
+
+## Type: list
+## Default: string
+#
+# Specifies the format of the DHCLIENT_USER_CLASS_ID variable.
+#
+# The DHCPv4 option and it's format is specified by RFC3004 as an array
+# of class identifiers, but most DHCP clients/servers aren't compliant
+# with the specification and send/expect a single string without proper
+# RFC3004 length-value tuple format instead.
+#
+# When set to "rfc3004" DHCLIENT_USER_CLASS_ID[SUFFIX] permit an RFC
+# compliant array, otherwise DHCLIENT_USER_CLASS_ID is used as string.
+#
+DHCLIENT_USER_CLASS_FORMAT=""
+
+## Type: string
+## Default: ""
+## Suffix: yes
+#
+# Specifies the user class identifier (array) to send in dhcp requests.
+# The DHCLIENT_USER_CLASS_FORMAT variable specified how to interpret it.
+#
+DHCLIENT_USER_CLASS_ID=""
+
+## Type: integer
+## Default: ""
+#
+# Specifies the lease time (in seconds), that is suggested to the
+# server. Default is to use the lease time offered by the server.
+#
+DHCLIENT_LEASE_TIME=""
+
+## Type: yesno
+## Default: yes
+#
+# This setting controls whether dhcp client should try to use DHCP settings
+# provided in its last lease when the dhcp-server is not reachable and
+# the lease hasn't expired yet.
+# Set this variable to "no" to disable the fallback to the last lease.
+#
+DHCLIENT_USE_LAST_LEASE="yes"
+
+## Type: yesno
+## Default: no
+#
+# Send a DHCPRELEASE to the server (sign off the address)? (yes|no)
+# This may lead to getting a different address/hostname next time an address
+# is requested. But some servers require it.
+#
+DHCLIENT_RELEASE_BEFORE_QUIT="no"
+
+## Type: integer
+## Default: 0
+#
+# Some interfaces need time to initialize and/or do not report correct status.
+# Add the latency time in seconds so these can be handled properly. Should
+# probably set per interface rather than here.
+# This setting causes a sleep time before dhcp clients are started regardless
+# of the link status.
+#
+# Note: RFC 2131 specifies, that the dhcp client should wait a random time
+# between one and ten seconds to desynchronize the use of DHCP at startup.
+# We do not use this initial delay to not slow down start/boot time.
+#
+DHCLIENT_SLEEP="0"
+
+## Type: integer
+## Default: 15
+#
+# The DHCPv4 client will try to get a lease for DHCLIENT_WAIT_AT_BOOT seconds,
+# then inform ifup waiting for it, that it continues in background.
+# When you increase this time, increase also the WAIT_FOR_INTERFACES variable
+# e.g. to a value twice as high as the time specified here.
+#
+DHCLIENT_WAIT_AT_BOOT="15"
+
+## Type: integer
+## Default: "0"
+#
+# The DHCPv4 client will stop processing / fail after this time when it does
+# not get a reply from the dhcp server. Before you set this variable, take a
+# look at DHCLIENT_WAIT_AT_BOOT allowing to continue in background instead.
+#
+DHCLIENT_TIMEOUT="0"
+
+## Path: Network/DHCP/DHCPv6 client
+## Description: Global DHCPv6 client configuration
+
+## Type: list(auto,managed,info)
+## Default: auto
+#
+# This option allows to specify the request mode used by the DHCPv6
+# client when the BOOTPROTO is set to dhcp or dhcp6, and overrides
+# the "Managed Address Configuration" and the "Other Configuration"
+# flags provided by the IPv6 router its Router Advertisement (RA)
+# for the network connected to this interface.
+#
+# auto: follow RA flags, remain silent when no RA flag is set
+# info: request other configuration (dns,ntp) only, no IP address
+# managed: request IP address as well as other configuration
+#
+DHCLIENT6_MODE="auto"
+
+## Type: yesno
+### Default: yes
+#
+# This option allows the DHCPv6 client to indicate its desire to accept
+# rapid commit leases using two-packet exchange (solicitation, lease ack)
+# instead of the four packet (solicitation, offer, request, lease ack).
+#
+DHCLIENT6_RAPID_COMMIT="yes"
+
+## Type: yesno
+## Default: no
+#
+# Should the DHCPv6 client set the hostname? (yes|no)
+#
+# When it is likely that this would occur during a running X session,
+# your DISPLAY variable could be screwed up and you won't be able to
+# open new windows anymore, then this should be "no".
+#
+# If it happens during booting it won't be a problem and you can
+# safely say "yes" here. For a roaming notebook with X kept running,
+# "no" makes more sense.
+#
+DHCLIENT6_SET_HOSTNAME="no"
+
+## Type: string
+### Default: AUTO
+#
+# Specifies the hostname option field when DHCPv6 client sends messages.
+# Some DHCP servers will update nameserver entries (dynamic DNS) to it.
+#
+# When set to "AUTO", the current hostname from /etc/hostname is sent.
+# Use this variable to override it with another hostname, or leave it
+# empty to not send any hostname.
+#
+DHCLIENT6_HOSTNAME_OPTION="AUTO"
+
+## Type: integer
+### Default: ""
+#
+# Specifies the preferred lifetime (in seconds) used as T1/renewal
+# (1/2 of it) and T1/rebind (4/5 of it) in DHCPv6 IA NA requests.
+#
+# Default is to not propose anything but use the times as offered
+# by the DHCPv6 server.
+#
+DHCLIENT6_LEASE_TIME=""
+
+## Type: yesno
+## Default: yes
+#
+# This setting controls whether DHCPv6 client should try to use settings
+# provided in its last lease when the DHCPv6-server is not reachable and
+# the lease hasn't expired yet.
+# Set this variable to "no" to disable the fallback to the last lease.
+#
+DHCLIENT6_USE_LAST_LEASE="yes"
+
+## Type: yesno
+## Default: no
+#
+# Send a DHCPv6 RELEASE to the server (sign off the address)? (yes|no)
+# This may lead to getting a different address/hostname next time an address
+# is requested. But some servers require it.
+#
+DHCLIENT6_RELEASE_BEFORE_QUIT="no"
+
+## Type: integer
+## Default: 0
+#
+# Some interfaces need time to initialize and/or do not report correct status.
+# By default, DHCPv6 waits until the link-local address (fe80::) is available
+# and then ~1 second as specified by RFC3315.
+# This setting allows override to use a non-standsrd initial delay.
+#
+DHCLIENT6_SLEEP="0"
+
+## Type: integer
+## Default: 15
+#
+# The DHCPv6 client will try to get a lease for DHCLIENT6_WAIT_AT_BOOT seconds,
+# then inform ifup waiting for it, that it continues in background.
+# When you increase this time, increase also the WAIT_FOR_INTERFACES variable
+# e.g. to a value twice as high as the time specified here.
+#
+DHCLIENT6_WAIT_AT_BOOT="15"
+
+## Type: integer
+## Default: "0"
+#
+# The dhcpv6 client will stop processing / fail after this time when it does
+# not get a reply from the dhcp server. Before you set this variable, take a
+# look at DHCLIENT6_WAIT_AT_BOOT allowing to continue in background instead.
+#
+DHCLIENT6_TIMEOUT="0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/ifcfg-lan0 new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/ifcfg-lan0
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/ifcfg-lan0 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/sysconfig/network/ifcfg-lan0 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,4 @@
+BOOTPROTO='dhcp'
+MTU=''
+REMOTE_IPADDR=''
+STARTMODE='onboot'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/systemd/system/RegisterFirst.service new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/systemd/system/RegisterFirst.service
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/systemd/system/RegisterFirst.service 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/systemd/system/RegisterFirst.service 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,13 @@
+[Unit]
+Description=Register System at first boot
+After=network.target
+Before=getty.target
+ConditionFileNotEmpty=!/etc/zypp/repos.d/HPC_Module_15_SP1_x86_64:SLE-Module-HPC15-SP1-Pool.repo
+
+[Service]
+ExecStart=/usr/sbin/SUSEConnect -e EMAIL -r REGCODE
+Type=oneshot
+RemainAfterExit=true
+
+[Install]
+WantedBy=basic.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/udev/rules.d/70-persistent-net.rules new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/udev/rules.d/70-persistent-net.rules
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/udev/rules.d/70-persistent-net.rules 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/etc/udev/rules.d/70-persistent-net.rules 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1 @@
+SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="?*", NAME="lan0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/usr/lib/systemd/system/grub_config.service new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/usr/lib/systemd/system/grub_config.service
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/usr/lib/systemd/system/grub_config.service 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/root/usr/lib/systemd/system/grub_config.service 2019-04-01 17:10:48.000000000 +0200
@@ -0,0 +1,11 @@
+[Unit]
+Description=Rebuild grub config from distro toolkit
+ConditionPathExists=/.kiwi_grub_config.trigger
+
+[Service]
+Type=oneshot
+ExecStart=/bin/bash -c 'grub2-mkconfig -o /boot/grub2/grub.cfg'
+ExecStartPost=/bin/bash -c 'rm -f /.kiwi_grub_config.trigger'
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/sles-15.1-JeOS.kiwi new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/sles-15.1-JeOS.kiwi
--- old/clustduct-0.0.1_alpha5/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/sles-15.1-JeOS.kiwi 1970-01-01 01:00:00.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/kiwi-descriptions/SUSE/x86_64/sles-15-JeOS/sles-15.1-JeOS.kiwi 2019-04-02 09:23:26.484755646 +0200
@@ -0,0 +1 @@
+symbolic link to config.xml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/src/bfcommons.lua new/clustduct-0.0.1_alpha7/src/bfcommons.lua
--- old/clustduct-0.0.1_alpha5/src/bfcommons.lua 2019-02-08 12:11:20.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/src/bfcommons.lua 2019-04-01 17:10:48.000000000 +0200
@@ -82,6 +82,7 @@
error(err)
end
ofile:write(pxe_template)
+ ofile:close()
end
if node_args["mac"] ~= nil then
local mac_filename = config.clustduct["tftpdir"].."/"
@@ -95,6 +96,7 @@
error(err)
end
ofile:write(mac_file_out)
+ ofile:close()
end
end
end
@@ -166,6 +168,7 @@
error(err)
end
ofile:write(grub_template)
+ ofile:close()
end
local ip_filename = config.clustduct["outdir"].."/"
ip_filename = string.gsub(ip_filename,"//","/")
@@ -177,6 +180,7 @@
error(err)
end
ofile:write(ip_file_out)
+ ofile:close()
end
if node_args["mac"] ~= nil then
local mac_filename = config.clustduct["tftpdir"].."/"
@@ -189,6 +193,7 @@
error(err)
end
ofile:write(mac_file_out)
+ ofile:close()
end
end
@@ -255,6 +260,7 @@
error(err)
end
ofile:write(output_str)
+ ofile:close()
end
end
@@ -303,6 +309,7 @@
error(err)
end
ofile:write(output_str)
+ ofile:close()
end
counter = 1
end
@@ -317,6 +324,7 @@
error(err)
end
ofile:write(menu_str)
+ ofile:close()
end
-- output_str = output_str.."LABEL go_back\n\tMENU LABEL Go back...\n\tKERNEL menu.c32\n\tAPPEND ~\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clustduct-0.0.1_alpha5/src/clustduct.lua new/clustduct-0.0.1_alpha7/src/clustduct.lua
--- old/clustduct-0.0.1_alpha5/src/clustduct.lua 2019-02-08 12:11:20.000000000 +0100
+++ new/clustduct-0.0.1_alpha7/src/clustduct.lua 2019-04-01 17:10:48.000000000 +0200
@@ -10,8 +10,8 @@
-- but checks if string is present in file
-- also the variable need_signal is set to true if the file is modified
-function update_file(first_arg,second_arg,filename)
- -- print("will manipulate file "..config.clustduct["ethers"])
+function update_file(first_arg,second_arg,filename)
+ -- print("clustduct: will manipulate file "..config.clustduct["ethers"])
local file, err = io.open(filename,"r")
if not file then error(err) end
local file_content = file:read("*a")
@@ -29,10 +29,10 @@
local second_pos = string.find(file_content,"%g+%s+"..sf_arg)
if first_pos then
file_content = string.gsub(file_content,ff_arg.."[%g%s]+\n","")
- -- print("found ip, content is now [snip]\n"..file_content.."\n[snap]")
+ -- print("clustduct: found ip, content is now [snip]\n"..file_content.."\n[snap]")
elseif second_pos then
file_content = string.gsub(file_content,"%g+%s+"..sf_arg,"")
- -- print("found mac, content is now [snip]\n"..file_content.."\n[snap]")
+ -- print("clustduct: found mac, content is now [snip]\n"..file_content.."\n[snap]")
end
file = io.open(filename,"w")
file_content=file_content..first_arg.." "..second_arg.."\n"
@@ -51,7 +51,7 @@
function send_signal()
if need_signal then
- -- print("sending SIGHUP to dnsmasq")
+ -- print("clustduct: sending SIGHUP to dnsmasq")
os.execute("pkill --signal SIGHUP dnsmasq")
need_signal = false
end
@@ -61,7 +61,7 @@
local node_attrs = handle:getattr(node)
-- should not happen but be sure
if node_attrs == nil then return false end
- if node_attrs["block"] then
+ if node_attrs["block"] then
return false
else
return true
@@ -73,15 +73,15 @@
function init()
g_db = require("genders")
require("bfcommons")
- print("init was called")
+ print("clustduct: init was called")
local cnf_file,err = loadfile(cnf_filename,"t",config)
-- initialize with defaults
if cnf_file then
- print("found config file "..cnf_filename)
+ print("clustduct: found config file "..cnf_filename)
cnf_file()
else
-- no config file found
- print(err)
+ print("clustduct: "..err)
end
if config["clustduct"] == nil then config["clustduct"] = {} end
if config.clustduct["ethers"] == nil then config.clustduct["ethers"]="/etc/ethers" end
@@ -93,7 +93,7 @@
if config.clustduct["tftpdir"] == nil then config.clustduct["tftpdir"] = "/srv/tftpboot" end
if config.clustduct["netclass"] == nil then config.clustduct["netclass"] = "01" end
handle = g_db.new(config.clustduct["genders"])
- print("opened genders database "..config.clustduct["genders"].." with "..#handle:getnodes().." nodes")
+ print("clustduct: opened genders database "..config.clustduct["genders"].." with "..#handle:getnodes().." nodes")
-- will update hosts file now
nodes = handle:query("ip")
for index,node in pairs(nodes) do
@@ -103,25 +103,25 @@
node_names = node.."."..config.clustduct["domain"].." "..node
end
update_file(node_attrs["ip"],node_names,config.clustduct["hosts"])
- end
+ end
send_signal()
- if config.clustduct["linear_add"] then print("will add nodes linear") else print("do nothing with new nodes") end
- print("end init")
+ if config.clustduct["linear_add"] then print("clustduct: will add nodes linear") else print("clustduct: do nothing with new nodes") end
+ print("clustduct: end init")
end
-function shutdown()
- print("shutdown was called")
+function shutdown()
+ print("clustduct: shutdown was called")
end
-function lease(action,args)
- print("lease was called with action "..action)
+function lease(action,args)
+ print("clustduct: lease was called with action "..action)
if action == "old" then
- print("in old tree")
+ print("clustduct: in old tree")
local node=handle:query("mac="..args["mac_address"])
if node~= nil and #node == 1 then
-- found node in genders, update ethers/hosts
local node_attrs = handle:getattr(node[1])
- print("found node "..node[1].." with mac="..args["mac_address"].." updating hosts and ethers")
+ print("clustduct: found node "..node[1].." with mac="..args["mac_address"].." updating hosts and ethers")
local node_names = node[1]
if config.clustduct["domain"] then
node_names = node[1].."."..config.clustduct["domain"].." "..node[1]
@@ -134,16 +134,16 @@
-- hosts/ethers is reread after signal is sned
send_signal()
else
- print("node with mac "..args["mac_address"].." is not known to genders")
+ print("clustduct: node with mac "..args["mac_address"].." is not known to genders")
end
elseif action == "add" then
- print("in add tree")
+ print("clustduct: in add tree")
-- query genders for mac
local node = handle:query("mac="..args["mac_address"])
if node~= nil and #node == 1 then
-- found node in genders, update ethers/hosts
local node_attrs = handle:getattr(node[1])
- print("found node "..node[1].." with mac="..args["mac_address"].." updating hosts and ethers")
+ print("clustduct: found node "..node[1].." with mac="..args["mac_address"].." updating hosts and ethers")
local node_names = node[1]
if config.clustduct["domain"] then
node_names = node[1].."."..config.clustduct["domain"].." "..node[1]
@@ -155,13 +155,13 @@
elseif config.clustduct["linear_add"] then
-- add the new node to genders, update ethers/hosts
local node = handle:query("~mac&&ip")
- if #node >= 1 then
- print("add node with mac "..args["mac_address"].." as "..node[1])
+ if #node >= 1 then
+ print("clustduct: add node with mac "..args["mac_address"].." as "..node[1])
local node_attr = handle:getattr(node[1])
- if node_attr["mac"] == nil then
+ if node_attr["mac"] == nil then
update_db(node[1],"mac="..args["mac_address"])
else
- print("WARNING: mac="..mac.." is allreay in database")
+ print("clustduct: WARNING: mac="..mac.." is already in database")
end
-- reload handle
handle:reload(config.clustduct["genders"])
@@ -171,33 +171,37 @@
end
update_file(node_attr["ip"],node_names,config.clustduct["hosts"])
update_file(args["mac_address"],node_attr["ip"],config.clustduct["ethers"])
- create_pxe_node_file(node[1],handle,config)
- create_grub_node_file(node[1],handle,config)
- -- hosts/ethers is reread after signal is sned
+ create_pxe_node_file(node[1],handle,config)
+ create_grub_node_file(node[1],handle,config)
+ -- hosts/ethers is reread after signal is send
send_signal()
+ else
+ print("clustduct: WARNING: node count: "..#node)
end
+ else
+ print("clustduct: not adding unknown node")
end
elseif action == "del" then
- print("in del, but do not care about vanished leases")
+ print("clustduct: in del, but do not care about vanished leases")
else
- print("unknown action "..action.." doing nothing")
+ print("clustduct: unknown action "..action.." doing nothing")
end
end
function tftp(action,args)
- print("tftp was called with "..action)
+ print("clustduct: tftp was called with "..action)
-- check if node specific config was selected, which may called from other ip
-- we can always return as installation is always done with node specific file
local nodefromfile = string.match(args["file_name"],"%g+/clustduct_node%.(%g+)%.%g+")
if nodefromfile == nil then return end
- print("This is node "..nodefromfile)
+ print("clustduct: This is node "..nodefromfile)
-- check for valid nodename
if not handle:isnode(nodefromfile) then return end
-- check if ip is in database
local node = handle:query("ip="..args["destination_address"])
if node == nil or node ~= nodefromfile then
- print("Will set ip="..args["destination_address"].." to "..nodefromfile)
+ print("clustduct: Will set ip="..args["destination_address"].." to "..nodefromfile)
if not allowfromhost(nodefromfile) then return end
-- read adress from the arp table
local shellhandle = io.popen("ip neigh show "..args["destination_address"])
@@ -214,7 +218,7 @@
handle:reload(config.clustduct["genders"])
send_signal()
else
- print("WARNING: mac="..mac.." is allreay in database")
+ print("clustduct: WARNING: mac="..mac.." is allreay in database")
end
end
end
@@ -239,7 +243,7 @@
if args["file_name"] ~= nil then
local ftrigger = string.gsub(install_attr["trigger"],"(%W)","%%%1")
if string.find(args["file_name"],"%g*"..ftrigger.."%g*") and install_attr["nextboot"] ~= nil then
- print("trigger "..install_attr["trigger"].." setting "..node[1].." boot="..install_attr["nextboot"])
+ print("clustduct: trigger "..install_attr["trigger"].." setting "..node[1].." boot="..install_attr["nextboot"])
update_db(node[1],"boot="..install_attr["nextboot"])
end
end