Hello community, here is the log from the commit of package microos-tools for openSUSE:Factory checked in at 2019-09-02 13:18:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/microos-tools (Old) and /work/SRC/openSUSE:Factory/.microos-tools.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "microos-tools" Mon Sep 2 13:18:38 2019 rev:4 rq:722653 version:1.0+git20190812.97ca0ee Changes: -------- --- /work/SRC/openSUSE:Factory/microos-tools/microos-tools.changes 2019-06-24 21:49:03.479905700 +0200 +++ /work/SRC/openSUSE:Factory/.microos-tools.new.7948/microos-tools.changes 2019-09-02 13:18:42.293381440 +0200 @@ -1,0 +2,11 @@ +Mon Aug 12 13:18:41 CEST 2019 - [email protected] + +- Remove create_autoyast_profile from sources + +------------------------------------------------------------------- +Mon Aug 12 11:18:31 UTC 2019 - [email protected] + +- Update to version 1.0+git20190812.97ca0ee: + * Add create_autoyast_profile to caasp section for reference + +------------------------------------------------------------------- Old: ---- create_autoyast_profile.pl microos-tools-1.0+git20190611.6211f74.tar.xz New: ---- microos-tools-1.0+git20190812.97ca0ee.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ microos-tools.spec ++++++ --- /var/tmp/diff_new_pack.5EzcFN/_old 2019-09-02 13:18:42.861381353 +0200 +++ /var/tmp/diff_new_pack.5EzcFN/_new 2019-09-02 13:18:42.861381353 +0200 @@ -17,18 +17,15 @@ Name: microos-tools -Version: 1.0+git20190611.6211f74 +Version: 1.0+git20190812.97ca0ee Release: 0 Summary: Files and Scripts for openSUSE MicroOS License: GPL-2.0-or-later Group: Development/Tools/Other URL: https://github.com/kubic-project/microos-tools -Source0: microos-tools-%{version}.tar.xz -Source1: create_autoyast_profile.pl +Source: microos-tools-%{version}.tar.xz BuildRequires: distribution-release Requires: read-only-root-fs -# for create_autoyast_prfile.pl -Requires: perl-JSON Conflicts: systemd-coredump Obsoletes: caasp-tools BuildArch: noarch @@ -44,9 +41,7 @@ %install cp -a {etc,usr} %{buildroot} mkdir -p %{buildroot}%{_sbindir} -install %{SOURCE1} %{buildroot}%{_sbindir}/create_autoyast_profile mkdir -p %{buildroot}%{_mandir}/man8 -pod2man %{SOURCE1} > %{buildroot}%{_mandir}/man8/create_autoyast_profile.8 %pre %service_add_pre setup-systemd-proxy-env.service @@ -69,9 +64,7 @@ %{_prefix}/lib/sysctl.d/30-corefiles.conf %{_libexecdir}/MicroOS-firstboot %{_sbindir}/btrfsQuota -%{_sbindir}/create_autoyast_profile %{_sbindir}/setup-systemd-proxy-env %{_mandir}/man8/btrfsQuota.8%{?ext_man} -%{_mandir}/man8/create_autoyast_profile.8%{?ext_man} %changelog ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.5EzcFN/_old 2019-09-02 13:18:42.901381347 +0200 +++ /var/tmp/diff_new_pack.5EzcFN/_new 2019-09-02 13:18:42.901381347 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">git://github.com/kubic-project/microos-tools.git</param> - <param name="changesrevision">6211f74e41dcf26b46cd0484d784ecb9e23de72f</param> + <param name="changesrevision">97ca0eeaf80cd24a6f0b74176573ce33c9aae745</param> </service> </servicedata> \ No newline at end of file ++++++ microos-tools-1.0+git20190611.6211f74.tar.xz -> microos-tools-1.0+git20190812.97ca0ee.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/microos-tools-1.0+git20190611.6211f74/caasp/usr/sbin/create_autoyast_profile new/microos-tools-1.0+git20190812.97ca0ee/caasp/usr/sbin/create_autoyast_profile --- old/microos-tools-1.0+git20190611.6211f74/caasp/usr/sbin/create_autoyast_profile 1970-01-01 01:00:00.000000000 +0100 +++ new/microos-tools-1.0+git20190812.97ca0ee/caasp/usr/sbin/create_autoyast_profile 2019-08-12 13:17:08.000000000 +0200 @@ -0,0 +1,482 @@ +#!/usr/bin/perl +# +# Copyright (C) 2017 Thorsten Kukuk +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# in Version 2 or later as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, see <http://www.gnu.org/licenses/>. +# + +=head1 NAME + + create_autoyast_profile - Create autoyast profile for SUSE CaaSP + +=head1 SYNOPSIS + + create_autoyast_profile [options] + +=head1 DESCRIPTION + + Create an autoyast profile for fully automatic installation of + SUSE Container as a Service Platform Cluster Node. + +=head1 OPTIONS + + -o|--output file Write autoyast profile as 'file' to disk + --salt-master Specify the name of the salt master server + --ntp-server Specify name of ntp server + --smt-url Specify url of SMT server + --regcode Specify registration code for SUSE CaaSP + --reg-email Specify email address for registration + --usage Print usage + -h|-?|--help Help + +=cut + +use strict; +use warnings; +use locale; +use Pod::Usage; +use Getopt::Long; +use Net::Domain qw(hostname hostfqdn); +use JSON qw(decode_json); + +my $outputfile = "-"; +my $saltmaster = hostfqdn(); +my $ntp_server = ""; +my $smturl = ""; +my $reg_email = ""; +my $regcode = ""; +my $help = 0; +my $man = 0; +my $usage = 0; + +GetOptions('o|output=s' => \$outputfile, + 'salt-master=s' => \$saltmaster, + 'smt-url=s' => \$smturl, + 'reg-email=s' => \$reg_email, + 'regcode=s' => \$regcode, + 'ntp-server=s'=>\$ntp_server, + 'man' => \$man, + 'u|usage' => \$usage, + 'help|h|?' => \$help) or pod2usage(2); +pod2usage(0) if $help; +pod2usage(-exitstatus => 0, -verbose => 2) if $man; +pod2usage(-exitstatus => 0, -verbose => 0) if $usage; + + + +open(OUTPUT,">$outputfile") || die("Can't open output file $outputfile: $!."); + +print_header(); +print_bootloader(); +print_general_section(); +print_languages(); +setup_networking(); +setup_ntp(); +print_software(); +print_services(); +print_scripts(); +set_root_password(); +setup_registration(); +setup_salt_minion(); +print_footer(); + +close(OUTPUT); + +#------------------------------------------------------------------------------ + +sub print_header { + print OUTPUT <<"HeaderText"; +<?xml version="1.0"?> +<!DOCTYPE profile> +<profile xmlns="http://www.suse.com/1.0/yast2ns" xmlns:config="http://www.suse.com/1.0/configns"> +HeaderText +} + +#------------------------------------------------------------------------------ + +sub print_footer { + print OUTPUT <<"EOT"; +</profile> +EOT +} + +#------------------------------------------------------------------------------ + +sub print_bootloader { + print OUTPUT <<"EOT"; + <bootloader> + <global> + <generic_mbr>true</generic_mbr> + <gfxmode>auto</gfxmode> + <hiddenmenu>false</hiddenmenu> + <os_prober>false</os_prober> + <terminal>gfxterm</terminal> + <timeout config:type="integer">8</timeout> + <suse_btrfs config:type="boolean">true</suse_btrfs> + </global> + </bootloader> +EOT +} + +#------------------------------------------------------------------------------ + +sub print_general_section { + print OUTPUT <<"EOT"; + <general> + <ask-list config:type="list"/> + <mode> + <confirm config:type="boolean">false</confirm> + <second_stage config:type="boolean">false</second_stage> + <self_update config:type="boolean">false</self_update> + </mode> + <proposals config:type="list"/> + <storage> + <partition_alignment config:type="symbol">align_optimal</partition_alignment> + <start_multipath config:type="boolean">false</start_multipath> + </storage> + </general> + <partitioning config:type="list"> + <drive> + <use>all</use> + <partitions config:type="list"> + <partition> + <mount>/boot/efi</mount> + <size>200mb</size> + <partition_id config:type="integer">1</partition_id> + <filesystem config:type="symbol">vfat</filesystem> + </partition> + <partition> + <mount>/</mount> + <size>30gb</size> + </partition> + <partition> + <filesystem config:type="symbol">btrfs</filesystem> + <mount>/var/lib/docker</mount> + <size>max</size> + </partition> + </partitions> + </drive> + </partitioning> + <ssh_import> + <copy_config config:type="boolean">false</copy_config> + <import config:type="boolean">false</import> + </ssh_import> +EOT +} + +#------------------------------------------------------------------------------ + +sub print_languages { + print OUTPUT <<"EOT"; + <keyboard> + <keymap>english-us</keymap> + </keyboard> + <language> + <language>en_US</language> + <languages/> + </language> + <timezone> + <hwclock>UTC</hwclock> + <timezone>Etc/GMT</timezone> + </timezone> +EOT +} + +#------------------------------------------------------------------------------ + +sub set_root_password { + + my $password = "!"; + my $encrypted = "true"; + + open(PASSWD, '/etc/passwd'); + while (<PASSWD>) { + chomp; + my($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); + + if ($login eq "root") { + if ($passwd eq "x") { + if (open(SHADOW, '/etc/shadow')) { + while (<SHADOW>) { + chomp; + my($slogin, $spasswd, $sp_lstchg, $sp_min, $sp_max, + $sp_warn, $sp_inact, $sp_expire, $sp_flag) = split(/:/); + if ($slogin eq "root") { + $password = $spasswd; + $encrypted = "true"; + } + } + close(SHADOW); + } + } else { + $password = $passwd; + } + } + } + close(PASSWD); + + print OUTPUT <<"EOT"; + <users config:type="list"> + <user> + <username>root</username> +EOT + +print OUTPUT " <user_password>$password</user_password>\n"; +print OUTPUT " <encrypted config:type=\"boolean\">$encrypted</encrypted>\n"; + + print OUTPUT <<"EOT" + </user> + </users> +EOT +} + +#------------------------------------------------------------------------------ + +sub print_software { + print OUTPUT <<"EOT"; + <software> + <image/> + <install_recommended config:type="boolean">false</install_recommended> + <instsource/> + <patterns config:type="list"> + <pattern>SUSE-MicroOS</pattern> + <pattern>SUSE-MicroOS-hardware</pattern> + <pattern>SUSE-MicroOS-apparmor</pattern> + <pattern>SUSE-CaaSP-Stack</pattern> + </patterns> + </software> +EOT +} + +#------------------------------------------------------------------------------ + +sub print_services { + print OUTPUT <<"EOT"; + <services-manager> + <default_target>multi-user</default_target> + <services> + <disable config:type="list"> + <service>purge-kernels</service> + </disable> + <enable config:type="list"> + <service>sshd</service> + <service>cloud-init-local</service> + <service>cloud-init</service> + <service>cloud-config</service> + <service>cloud-final</service> + <service>issue-generator</service> + <service>issue-add-ssh-keys</service> + <service>docker</service> + <service>container-feeder</service> +EOT + print OUTPUT " <service>salt-minion</service>\n" if ($saltmaster ne ""); + print OUTPUT " <service>systemd-timesyncd</service>\n" if ($ntp_server eq ""); + print OUTPUT <<"EOT"; + </enable> + </services> + </services-manager> +EOT +} + +#------------------------------------------------------------------------------ + +sub print_scripts { + + if ($saltmaster ne "" || $ntp_server eq "") { + print OUTPUT <<"EOT"; + <scripts> + <chroot-scripts config:type="list"> +EOT + if ($saltmaster ne "") { + print OUTPUT <<"EOT"; + <script> + <filename>configure-salt.sh</filename> + <interpreter>shell</interpreter> + <chrooted config:type="boolean">true</chrooted> + <source> +<![CDATA[ +#!/bin/sh +EOT + print OUTPUT "echo \"master: $saltmaster\" > /etc/salt/minion.d/master.conf" if ($saltmaster ne ""); + print OUTPUT <<"EOT"; +]]> + </source> + </script> +EOT +} + if ($ntp_server eq "") { + print OUTPUT <<"EOT"; + <script> + <filename>configure-timesyncd.sh</filename> + <interpreter>shell</interpreter> + <chrooted config:type="boolean">true</chrooted> + <source> +<![CDATA[ +#!/bin/sh +EOT + my $my_hostname = hostfqdn(); + print OUTPUT "sed -i -e 's|#NTP=.*|NTP=$my_hostname|g' /etc/systemd/timesyncd.conf\n"; + print OUTPUT <<"EOT"; +]]> + </source> + </script> +EOT +} + print OUTPUT " </chroot-scripts>\n"; + print OUTPUT " </scripts>\n"; + } +} + +#------------------------------------------------------------------------------ + +sub find_smturl { + if (open(INPUTFILE, "</etc/SUSEConnect")) { + while (<INPUTFILE>) { + chomp; + if ( $_ =~ m/^url:/ ) { + $_ =~ s/url: //; + close (INPUTFILE); + return $_; + } + } + } + close (INPUTFILE); + return ""; +} + +sub setup_registration { + my $is_active = 0; + + if ($smturl ne "" || $regcode ne "") { + $is_active = 1; + } else { + my $connectoutput = `/usr/sbin/SUSEConnect -s 2>/dev/null`; + if ($? == 0) { + my $decoded = decode_json($connectoutput); + foreach my $prod ( @{$decoded} ) { + if ($prod->{"identifier"} eq "CAASP") { + $regcode = $prod->{"regcode"} if ($regcode eq ""); + $is_active = 1 if ($prod->{"status"} eq "Registered"); + } + } + } + } + + print OUTPUT " <suse_register>\n"; + if ($is_active) { + $smturl = find_smturl() if ($smturl eq ""); + + print OUTPUT " <do_registration config:type=\"boolean\">true</do_registration>\n"; + print OUTPUT " <email>$reg_email</email>\n" unless ($reg_email eq ""); + print OUTPUT " <reg_code>$regcode</reg_code>\n" if (defined $regcode && $regcode ne ""); + print OUTPUT " <install_updates config:type=\"boolean\">true</install_updates>\n"; + print OUTPUT " <slp_discovery config:type=\"boolean\">false</slp_discovery>\n"; + print OUTPUT " <reg_server>$smturl</reg_server>\n" if ($smturl ne ""); + } else { + print OUTPUT " <do_registration config:type=\"boolean\">false</do_registration>\n"; + } + print OUTPUT " </suse_register>\n"; +} + +#------------------------------------------------------------------------------ + +sub setup_salt_minion { + + if ($saltmaster ne "") { + print OUTPUT <<"EOT"; + <files config:type="list"> + <file> + <file_path>/etc/salt/minion.d/master.conf</file_path> + <file_contents> +<![CDATA[ +EOT + print OUTPUT "master: $saltmaster\n"; + print OUTPUT <<"EOT"; +]]> + </file_contents> + <file_owner>root.root</file_owner> + <file_permissions>640</file_permissions> + </file> + </files> +EOT + } +} + +#------------------------------------------------------------------------------ + +sub setup_networking { + print OUTPUT <<"EOT"; + <networking> + <dhcp_options> + <dhclient_client_id/> + <dhclient_hostname_option>AUTO</dhclient_hostname_option> + </dhcp_options> + <dns> + <dhcp_hostname config:type="boolean">true</dhcp_hostname> + <resolv_conf_policy>auto</resolv_conf_policy> + <write_hostname config:type="boolean">false</write_hostname> + </dns> + <interfaces config:type="list"> + <interface> + <bootproto>dhcp</bootproto> + <device>eth0</device> + <dhclient_set_default_route>yes</dhclient_set_default_route> + <startmode>auto</startmode> + </interface> + <interface> + <bootproto>static</bootproto> + <device>lo</device> + <firewall>no</firewall> + <ipaddr>127.0.0.1</ipaddr> + <netmask>255.0.0.0</netmask> + <network>127.0.0.0</network> + <prefixlen>8</prefixlen> + <startmode>nfsroot</startmode> + <usercontrol>no</usercontrol> + </interface> + </interfaces> + <ipv6 config:type="boolean">true</ipv6> + <keep_install_network config:type="boolean">true</keep_install_network> + <setup_before_proposal config:type="boolean">true</setup_before_proposal> + <managed config:type="boolean">false</managed> + <routing> + <ipv4_forward config:type="boolean">false</ipv4_forward> + <ipv6_forward config:type="boolean">false</ipv6_forward> + </routing> + </networking> +EOT +} + +#------------------------------------------------------------------------------ + +sub setup_ntp { + return if ($ntp_server eq ""); + print OUTPUT <<"EOT"; + <ntp-client> + <configure_dhcp config:type="boolean">false</configure_dhcp> + <peers config:type="list"> + <peer> +EOT + print OUTPUT " <address>$ntp_server</address>\n"; + print OUTPUT <<"EOT"; + <options>iburst</options> + <type>server</type> + </peer> + </peers> + <start_at_boot config:type="boolean">true</start_at_boot> + <start_in_chroot config:type="boolean">false</start_in_chroot> + </ntp-client> +EOT +} + +#------------------------------------------------------------------------------
