From 6b2a5cb4a524b9059e25fe7ec1989030c456261c Mon Sep 17 00:00:00 2001 From: "Stephen A. Zarkos" Date: Wed, 29 Jul 2015 19:05:03 +0000 Subject: [PATCH 1/7] Fix error with applying azure/assets/udev.diff When creating an image for Azure we see the following error when applying udev.diff: TypeError: cannot concatenate 'str' and 'file' objects Resolving this in log_call() I still see the following error: patch: **** Only garbage was found in the patch input. So fixing this in providers/azure/tasks/boot.py seems to be the best route. --- bootstrapvz/providers/azure/tasks/boot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bootstrapvz/providers/azure/tasks/boot.py b/bootstrapvz/providers/azure/tasks/boot.py index 1ec9f56..d7d4d5f 100644 --- a/bootstrapvz/providers/azure/tasks/boot.py +++ b/bootstrapvz/providers/azure/tasks/boot.py @@ -15,9 +15,9 @@ class PatchUdev(Task): from bootstrapvz.common.tools import log_check_call from . import assets # c.f. http://anonscm.debian.org/cgit/pkg-systemd/systemd.git/commit/?id=61e055638cea - with open(os.path.join(assets, 'udev.diff')) as diff_file: - udev_dir = os.path.join(info.root, 'usr/share/initramfs-tools/scripts/init-top') - log_check_call(['patch', '--no-backup-if-mismatch', '-p6', '-d' + udev_dir], stdin=diff_file) + diff_file = file.read(open(os.path.join(assets, 'udev.diff'), 'r')) + udev_dir = os.path.join(info.root, 'usr/share/initramfs-tools/scripts/init-top') + log_check_call(['patch', '--no-backup-if-mismatch', '-p6', '-d' + udev_dir], stdin=diff_file) class ConfigureGrub(Task): From 8e06ef2294b08f93d3f1f28f27e1e4d77104b7cd Mon Sep 17 00:00:00 2001 From: "Stephen A. Zarkos" Date: Wed, 29 Jul 2015 19:18:04 +0000 Subject: [PATCH 2/7] Add boot parameters to Azure config to ease local debugging - Add console=tty0 to see kernel/boot messsages on local console - Set serial port speed to 115200 --- bootstrapvz/providers/azure/tasks/boot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrapvz/providers/azure/tasks/boot.py b/bootstrapvz/providers/azure/tasks/boot.py index d7d4d5f..3112b8e 100644 --- a/bootstrapvz/providers/azure/tasks/boot.py +++ b/bootstrapvz/providers/azure/tasks/boot.py @@ -29,5 +29,5 @@ class ConfigureGrub(Task): def run(cls, info): from bootstrapvz.common.tools import sed_i grub_config = os.path.join(info.root, 'etc/default/grub') - sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX*=".*)"\s*$', r'\1console=ttyS0 earlyprintk=ttyS0 rootdelay=300"') - sed_i(grub_config, r'^.*(GRUB_TIMEOUT=).*$', r'GRUB_TIMEOUT=0') + sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX*=".*)"\s*$', r'\1console=tty0 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300"') + sed_i(grub_config, r'^.*(GRUB_TIMEOUT=).*$', r'GRUB_TIMEOUT=5') From b5a0c7df2167933c9fd300d9bfbee35199aec818 Mon Sep 17 00:00:00 2001 From: "Stephen A. Zarkos" Date: Wed, 29 Jul 2015 23:36:58 +0000 Subject: [PATCH 3/7] Change default shell in /etc/default/useradd for Azure images. --- bootstrapvz/providers/azure/tasks/packages.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bootstrapvz/providers/azure/tasks/packages.py b/bootstrapvz/providers/azure/tasks/packages.py index e982185..2089404 100644 --- a/bootstrapvz/providers/azure/tasks/packages.py +++ b/bootstrapvz/providers/azure/tasks/packages.py @@ -47,3 +47,9 @@ class Waagent(Task): if os.path.isfile(info.manifest.provider['waagent']['conf']): log_check_call(['cp', info.manifest.provider['waagent']['conf'], os.path.join(info.root, 'etc/waagent.conf')]) + + # The Azure Linux agent uses 'useradd' to add users, but SHELL + # is set to /bin/sh by default. Set this to /bin/bash instead. + from bootstrapvz.common.tools import sed_i + useradd_config = os.path.join(info.root, 'etc/default/useradd') + sed_i(useradd_config, r'^(SHELL=.*)', r'SHELL=/bin/bash') From 7cb4453fe4b26a7d5aab6993562e4733e167d22f Mon Sep 17 00:00:00 2001 From: "Stephen A. Zarkos" Date: Wed, 5 Aug 2015 22:16:24 +0000 Subject: [PATCH 4/7] Make sure we can override grub.ConfigureGrub for Azure images. --- bootstrapvz/providers/azure/tasks/boot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bootstrapvz/providers/azure/tasks/boot.py b/bootstrapvz/providers/azure/tasks/boot.py index 3112b8e..c93b85a 100644 --- a/bootstrapvz/providers/azure/tasks/boot.py +++ b/bootstrapvz/providers/azure/tasks/boot.py @@ -23,11 +23,13 @@ class PatchUdev(Task): class ConfigureGrub(Task): description = 'Change grub configuration to allow for ttyS0 output' phase = phases.system_modification + predecessors = [grub.ConfigureGrub] successors = [grub.InstallGrub_1_99, grub.InstallGrub_2] @classmethod def run(cls, info): from bootstrapvz.common.tools import sed_i grub_config = os.path.join(info.root, 'etc/default/grub') + sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX_DEFAULT=.*)', r'GRUB_CMDLINE_LINUX_DEFAULT=""') sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX*=".*)"\s*$', r'\1console=tty0 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300"') sed_i(grub_config, r'^.*(GRUB_TIMEOUT=).*$', r'GRUB_TIMEOUT=5') From 0212db733ddcdcba09013a08f56c8be89be22ef0 Mon Sep 17 00:00:00 2001 From: "Stephen A. Zarkos" Date: Wed, 5 Aug 2015 22:20:14 +0000 Subject: [PATCH 5/7] Updates to Azure image creation. - Wheezy images use wheezy-backports kernel by default - Change Wheezy image to use single partition - Update WALinuxAgent to use 2.0.14 --- bootstrapvz/providers/azure/__init__.py | 3 ++- manifests/examples/azure/jessie.yml | 8 ++++++-- manifests/examples/azure/wheezy.yml | 18 ++++++++++++------ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/bootstrapvz/providers/azure/__init__.py b/bootstrapvz/providers/azure/__init__.py index 5081448..7d2249d 100644 --- a/bootstrapvz/providers/azure/__init__.py +++ b/bootstrapvz/providers/azure/__init__.py @@ -15,7 +15,8 @@ def validate_manifest(data, validator, error): def resolve_tasks(taskset, manifest): taskset.update(task_groups.get_standard_groups(manifest)) - taskset.update([tasks.packages.DefaultPackages, + taskset.update([apt.AddBackports, + tasks.packages.DefaultPackages, loopback.AddRequiredCommands, loopback.Create, initd.InstallInitScripts, diff --git a/manifests/examples/azure/jessie.yml b/manifests/examples/azure/jessie.yml index a06114b..43ee5f2 100644 --- a/manifests/examples/azure/jessie.yml +++ b/manifests/examples/azure/jessie.yml @@ -2,7 +2,7 @@ provider: name: azure waagent: - version: 2.0.13 + version: 2.0.14 bootstrapper: mirror: http://httpredir.debian.org/debian/ workspace: /target @@ -23,7 +23,11 @@ volume: root: filesystem: ext4 size: 10GiB -packages: {} +packages: + components: + - main + - contrib + - non-free plugins: ntp: servers: diff --git a/manifests/examples/azure/wheezy.yml b/manifests/examples/azure/wheezy.yml index 558d666..623265e 100644 --- a/manifests/examples/azure/wheezy.yml +++ b/manifests/examples/azure/wheezy.yml @@ -2,7 +2,7 @@ provider: name: azure waagent: - version: 2.0.4 + version: 2.0.14 bootstrapper: mirror: http://httpredir.debian.org/debian/ workspace: /target @@ -20,13 +20,19 @@ volume: backing: raw partitions: type: msdos - boot: - filesystem: ext2 - size: 32MiB root: filesystem: ext4 - size: 7GiB -packages: {} + size: 10GiB +packages: + components: + - main + - contrib + - non-free + preferences: + backport-kernel: + - package: linux-image-* initramfs-tools + pin: release n=wheezy-backports + pin-priority: 500 plugins: ntp: servers: From 3f743d01b146b65329e16e83ff0c6ec07bb8e70c Mon Sep 17 00:00:00 2001 From: "Stephen A. Zarkos" Date: Thu, 6 Aug 2015 00:21:23 +0000 Subject: [PATCH 6/7] Small fixes for Azure images - Add apt import for backports - Comment GRUB_HIDDEN_TIMEOUT so we can set GRUB_TIMEOUT. --- bootstrapvz/providers/azure/__init__.py | 1 + bootstrapvz/providers/azure/tasks/boot.py | 1 + 2 files changed, 2 insertions(+) diff --git a/bootstrapvz/providers/azure/__init__.py b/bootstrapvz/providers/azure/__init__.py index 7d2249d..970a5db 100644 --- a/bootstrapvz/providers/azure/__init__.py +++ b/bootstrapvz/providers/azure/__init__.py @@ -5,6 +5,7 @@ import tasks.image from bootstrapvz.common.tasks import loopback from bootstrapvz.common.tasks import initd from bootstrapvz.common.tasks import ssh +from bootstrapvz.common.tasks import apt def validate_manifest(data, validator, error): diff --git a/bootstrapvz/providers/azure/tasks/boot.py b/bootstrapvz/providers/azure/tasks/boot.py index c93b85a..ccd961a 100644 --- a/bootstrapvz/providers/azure/tasks/boot.py +++ b/bootstrapvz/providers/azure/tasks/boot.py @@ -32,4 +32,5 @@ class ConfigureGrub(Task): grub_config = os.path.join(info.root, 'etc/default/grub') sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX_DEFAULT=.*)', r'GRUB_CMDLINE_LINUX_DEFAULT=""') sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX*=".*)"\s*$', r'\1console=tty0 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300"') + sed_i(grub_config, r'^(GRUB_HIDDEN_TIMEOUT=).*', r'#GRUB_HIDDEN_TIMEOUT=true') sed_i(grub_config, r'^.*(GRUB_TIMEOUT=).*$', r'GRUB_TIMEOUT=5') From 52ed8c247fe234bb3ed2e784d881a25e86928033 Mon Sep 17 00:00:00 2001 From: "Stephen A. Zarkos" Date: Tue, 25 Aug 2015 00:15:01 +0000 Subject: [PATCH 7/7] Simplify Azure udev patch. --- bootstrapvz/providers/azure/tasks/boot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bootstrapvz/providers/azure/tasks/boot.py b/bootstrapvz/providers/azure/tasks/boot.py index ccd961a..892a842 100644 --- a/bootstrapvz/providers/azure/tasks/boot.py +++ b/bootstrapvz/providers/azure/tasks/boot.py @@ -15,9 +15,9 @@ class PatchUdev(Task): from bootstrapvz.common.tools import log_check_call from . import assets # c.f. http://anonscm.debian.org/cgit/pkg-systemd/systemd.git/commit/?id=61e055638cea - diff_file = file.read(open(os.path.join(assets, 'udev.diff'), 'r')) - udev_dir = os.path.join(info.root, 'usr/share/initramfs-tools/scripts/init-top') - log_check_call(['patch', '--no-backup-if-mismatch', '-p6', '-d' + udev_dir], stdin=diff_file) + udev_file = os.path.join(info.root, 'usr/share/initramfs-tools/scripts/init-top/udev') + diff_file = os.path.join(assets, 'udev.diff') + log_check_call(['patch', '--no-backup-if-mismatch', udev_file, diff_file]) class ConfigureGrub(Task):