mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 15:36:27 +00:00
Extlinux support
The bootloader is now specified in the manifest
This commit is contained in:
parent
68368b1782
commit
44f3296426
17 changed files with 69 additions and 14 deletions
|
@ -20,11 +20,12 @@
|
||||||
"properties": {
|
"properties": {
|
||||||
"release": { "enum": ["wheezy"] },
|
"release": { "enum": ["wheezy"] },
|
||||||
"architecture": { "enum": ["i386", "amd64"] },
|
"architecture": { "enum": ["i386", "amd64"] },
|
||||||
|
"bootloader": { "enum": ["pvgrub", "grub", "extlinux"] },
|
||||||
"timezone": { "type": "string" },
|
"timezone": { "type": "string" },
|
||||||
"locale": { "type": "string" },
|
"locale": { "type": "string" },
|
||||||
"charmap": { "type": "string" }
|
"charmap": { "type": "string" }
|
||||||
},
|
},
|
||||||
"required": ["release", "architecture", "timezone", "locale", "charmap"]
|
"required": ["release", "architecture", "bootloader", "timezone", "locale", "charmap"]
|
||||||
},
|
},
|
||||||
"packages": {
|
"packages": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from common.tasks import workspace
|
from common.tasks import workspace
|
||||||
from common.tasks import packages
|
from common.tasks import packages
|
||||||
from common.tasks import host
|
from common.tasks import host
|
||||||
|
from common.tasks import boot
|
||||||
from common.tasks import bootstrap
|
from common.tasks import bootstrap
|
||||||
from common.tasks import volume
|
from common.tasks import volume
|
||||||
from common.tasks import filesystem
|
from common.tasks import filesystem
|
||||||
|
@ -62,6 +63,11 @@ locale_set = [locale.LocaleBootstrapPackage,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
bootloader_set = {'grub': [boot.AddGrubPackage, boot.InstallGrub],
|
||||||
|
'extlinux': [boot.AddExtlinuxPackage, boot.InstallExtLinux],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_fs_specific_set(partitions):
|
def get_fs_specific_set(partitions):
|
||||||
task_set = {'ext2': [filesystem.TuneVolumeFS],
|
task_set = {'ext2': [filesystem.TuneVolumeFS],
|
||||||
'ext3': [filesystem.TuneVolumeFS],
|
'ext3': [filesystem.TuneVolumeFS],
|
||||||
|
|
|
@ -30,6 +30,15 @@ class DisableGetTTYs(Task):
|
||||||
sed_i(inittab_path, '^' + i + ttyx + i, '#' + i + ttyx + i)
|
sed_i(inittab_path, '^' + i + ttyx + i, '#' + i + ttyx + i)
|
||||||
|
|
||||||
|
|
||||||
|
class AddGrubPackage(Task):
|
||||||
|
description = 'Adding grub package'
|
||||||
|
phase = phases.preparation
|
||||||
|
predecessors = [apt.AddDefaultSources]
|
||||||
|
|
||||||
|
def run(self, info):
|
||||||
|
info.packages.add('grub-pc')
|
||||||
|
|
||||||
|
|
||||||
class InstallGrub(Task):
|
class InstallGrub(Task):
|
||||||
description = 'Installing grub'
|
description = 'Installing grub'
|
||||||
phase = phases.system_modification
|
phase = phases.system_modification
|
||||||
|
@ -91,3 +100,24 @@ class InstallGrub(Task):
|
||||||
|
|
||||||
if isinstance(info.volume, LoopbackVolume):
|
if isinstance(info.volume, LoopbackVolume):
|
||||||
remount(info.volume, unlink_fn)
|
remount(info.volume, unlink_fn)
|
||||||
|
|
||||||
|
|
||||||
|
class AddExtlinuxPackage(Task):
|
||||||
|
description = 'Adding extlinux package'
|
||||||
|
phase = phases.preparation
|
||||||
|
predecessors = [apt.AddDefaultSources]
|
||||||
|
|
||||||
|
def run(self, info):
|
||||||
|
info.packages.add('extlinux')
|
||||||
|
|
||||||
|
|
||||||
|
class InstallExtLinux(Task):
|
||||||
|
description = 'Installing extlinux'
|
||||||
|
phase = phases.system_modification
|
||||||
|
predecessors = [apt.AptUpgrade]
|
||||||
|
|
||||||
|
def run(self, info):
|
||||||
|
from common.tools import log_check_call
|
||||||
|
log_check_call(['/usr/sbin/chroot', info.root,
|
||||||
|
'/usr/bin/extlinux',
|
||||||
|
'--install', '/boot'])
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"system": {
|
"system": {
|
||||||
"release": "wheezy",
|
"release": "wheezy",
|
||||||
"architecture": "amd64",
|
"architecture": "amd64",
|
||||||
|
"bootloader": "extlinux",
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"locale": "en_US",
|
"locale": "en_US",
|
||||||
"charmap": "UTF-8"
|
"charmap": "UTF-8"
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"system": {
|
"system": {
|
||||||
"release": "wheezy",
|
"release": "wheezy",
|
||||||
"architecture": "amd64",
|
"architecture": "amd64",
|
||||||
|
"bootloader": "pvgrub",
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"locale": "en_US",
|
"locale": "en_US",
|
||||||
"charmap": "UTF-8"
|
"charmap": "UTF-8"
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"system": {
|
"system": {
|
||||||
"release": "wheezy",
|
"release": "wheezy",
|
||||||
"architecture": "i386",
|
"architecture": "i386",
|
||||||
|
"bootloader": "pvgrub",
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"locale": "en_US",
|
"locale": "en_US",
|
||||||
"charmap": "UTF-8"
|
"charmap": "UTF-8"
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"system": {
|
"system": {
|
||||||
"release": "wheezy",
|
"release": "wheezy",
|
||||||
"architecture": "amd64",
|
"architecture": "amd64",
|
||||||
|
"bootloader": "pvgrub",
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"locale": "en_US",
|
"locale": "en_US",
|
||||||
"charmap": "UTF-8"
|
"charmap": "UTF-8"
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"system": {
|
"system": {
|
||||||
"release": "wheezy",
|
"release": "wheezy",
|
||||||
"architecture": "amd64",
|
"architecture": "amd64",
|
||||||
|
"bootloader": "pvgrub",
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"locale": "en_US",
|
"locale": "en_US",
|
||||||
"charmap": "UTF-8"
|
"charmap": "UTF-8"
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"system": {
|
"system": {
|
||||||
"release": "wheezy",
|
"release": "wheezy",
|
||||||
"architecture": "amd64",
|
"architecture": "amd64",
|
||||||
|
"bootloader": "pvgrub",
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"locale": "en_US",
|
"locale": "en_US",
|
||||||
"charmap": "UTF-8"
|
"charmap": "UTF-8"
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
"system": {
|
"system": {
|
||||||
"release": "wheezy",
|
"release": "wheezy",
|
||||||
"architecture": "amd64",
|
"architecture": "amd64",
|
||||||
|
"bootloader": "grub",
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"locale": "en_US",
|
"locale": "en_US",
|
||||||
"charmap": "UTF-8"
|
"charmap": "UTF-8"
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
"system": {
|
"system": {
|
||||||
"release": "wheezy",
|
"release": "wheezy",
|
||||||
"architecture": "amd64",
|
"architecture": "amd64",
|
||||||
|
"bootloader": "grub",
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"locale": "en_US",
|
"locale": "en_US",
|
||||||
"charmap": "UTF-8"
|
"charmap": "UTF-8"
|
||||||
|
|
|
@ -67,10 +67,11 @@ def resolve_tasks(tasklist, manifest):
|
||||||
|
|
||||||
tasks.ami.RegisterAMI)
|
tasks.ami.RegisterAMI)
|
||||||
|
|
||||||
if manifest.virtualization == 'pvm':
|
if manifest.system['bootloader'] == 'pvgrub':
|
||||||
tasklist.add(tasks.boot.ConfigurePVGrub)
|
tasklist.add(boot.AddGrubPackage, tasks.boot.ConfigurePVGrub)
|
||||||
else:
|
else:
|
||||||
tasklist.add(boot.InstallGrub)
|
from common.task_sets import bootloader_set
|
||||||
|
tasklist.add(*bootloader_set.get(manifest.system['bootloader']))
|
||||||
|
|
||||||
backing_specific_tasks = {'ebs': [tasks.ebs.Create,
|
backing_specific_tasks = {'ebs': [tasks.ebs.Create,
|
||||||
tasks.ebs.Attach,
|
tasks.ebs.Attach,
|
||||||
|
|
|
@ -6,8 +6,7 @@ class Manifest(base.Manifest):
|
||||||
def validate(self, data):
|
def validate(self, data):
|
||||||
super(Manifest, self).validate(data)
|
super(Manifest, self).validate(data)
|
||||||
from os import path
|
from os import path
|
||||||
schema_path = path.join(path.dirname(__file__), 'manifest-schema.json')
|
self.schema_validate(data, path.join(path.dirname(__file__), 'manifest-schema.json'))
|
||||||
self.schema_validate(data, schema_path)
|
|
||||||
if data['volume']['backing'] == 'ebs':
|
if data['volume']['backing'] == 'ebs':
|
||||||
volume_size = self._calculate_volume_size(data['volume']['partitions'])
|
volume_size = self._calculate_volume_size(data['volume']['partitions'])
|
||||||
if volume_size % 1024 != 0:
|
if volume_size % 1024 != 0:
|
||||||
|
@ -15,8 +14,12 @@ class Manifest(base.Manifest):
|
||||||
'(MBR partitioned volumes are 1MB larger than specified, for the post-mbr gap)')
|
'(MBR partitioned volumes are 1MB larger than specified, for the post-mbr gap)')
|
||||||
raise ManifestError(msg, self)
|
raise ManifestError(msg, self)
|
||||||
else:
|
else:
|
||||||
schema_path = path.join(path.dirname(__file__), 'manifest-schema-s3.json')
|
self.schema_validate(data, path.join(path.dirname(__file__), 'manifest-schema-s3.json'))
|
||||||
self.schema_validate(data, schema_path)
|
|
||||||
|
if data['virtualization'] == 'pvm' and data['system']['bootloader'] != 'pvgrub':
|
||||||
|
raise ManifestError('Paravirtualized AMIs only support pvgrub as a bootloader', self)
|
||||||
|
if data['virtualization'] == 'hvm' and data['system']['bootloader'] != 'extlinux':
|
||||||
|
raise ManifestError('HVM AMIs only support extlinux as a bootloader', self)
|
||||||
|
|
||||||
def parse(self, data):
|
def parse(self, data):
|
||||||
super(Manifest, self).parse(data)
|
super(Manifest, self).parse(data)
|
||||||
|
|
|
@ -12,7 +12,6 @@ class DefaultPackages(Task):
|
||||||
info.packages.add('openssh-server')
|
info.packages.add('openssh-server')
|
||||||
info.packages.add('file') # Needed for the init scripts
|
info.packages.add('file') # Needed for the init scripts
|
||||||
info.packages.add('dhcpcd') # isc-dhcp-client doesn't work properly with ec2
|
info.packages.add('dhcpcd') # isc-dhcp-client doesn't work properly with ec2
|
||||||
info.packages.add('grub-pc')
|
|
||||||
|
|
||||||
info.exclude_packages.add('isc-dhcp-client')
|
info.exclude_packages.add('isc-dhcp-client')
|
||||||
info.exclude_packages.add('isc-dhcp-common')
|
info.exclude_packages.add('isc-dhcp-common')
|
||||||
|
|
|
@ -5,7 +5,6 @@ from common.tasks import loopback
|
||||||
from common.tasks import partitioning
|
from common.tasks import partitioning
|
||||||
from common.tasks import filesystem
|
from common.tasks import filesystem
|
||||||
from common.tasks import bootstrap
|
from common.tasks import bootstrap
|
||||||
from common.tasks import boot
|
|
||||||
from common.tasks import security
|
from common.tasks import security
|
||||||
from common.tasks import network
|
from common.tasks import network
|
||||||
from common.tasks import initd
|
from common.tasks import initd
|
||||||
|
@ -29,6 +28,9 @@ def resolve_tasks(tasklist, manifest):
|
||||||
tasklist.add(*apt_set)
|
tasklist.add(*apt_set)
|
||||||
tasklist.add(*locale_set)
|
tasklist.add(*locale_set)
|
||||||
|
|
||||||
|
from common.task_sets import bootloader_set
|
||||||
|
tasklist.add(*bootloader_set.get(manifest.system['bootloader']))
|
||||||
|
|
||||||
if manifest.volume['partitions']['type'] != 'none':
|
if manifest.volume['partitions']['type'] != 'none':
|
||||||
from common.task_sets import partitioning_set
|
from common.task_sets import partitioning_set
|
||||||
tasklist.add(*partitioning_set)
|
tasklist.add(*partitioning_set)
|
||||||
|
@ -37,7 +39,6 @@ def resolve_tasks(tasklist, manifest):
|
||||||
|
|
||||||
loopback.Create,
|
loopback.Create,
|
||||||
|
|
||||||
boot.InstallGrub,
|
|
||||||
security.EnableShadowConfig,
|
security.EnableShadowConfig,
|
||||||
network.RemoveDNSInfo,
|
network.RemoveDNSInfo,
|
||||||
network.ConfigureNetworkIF,
|
network.ConfigureNetworkIF,
|
||||||
|
|
|
@ -11,6 +11,15 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"system": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"bootloader": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["grub"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"volume": {
|
"volume": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
|
@ -9,9 +9,6 @@ class DefaultPackages(Task):
|
||||||
predecessors = [apt.AddDefaultSources]
|
predecessors = [apt.AddDefaultSources]
|
||||||
|
|
||||||
def run(self, info):
|
def run(self, info):
|
||||||
# Add some basic packages we are going to need
|
|
||||||
info.packages.add('grub2')
|
|
||||||
|
|
||||||
kernels = {'amd64': 'linux-image-amd64',
|
kernels = {'amd64': 'linux-image-amd64',
|
||||||
'i386': 'linux-image-686', }
|
'i386': 'linux-image-686', }
|
||||||
info.packages.add(kernels.get(info.manifest.system['architecture']))
|
info.packages.add(kernels.get(info.manifest.system['architecture']))
|
||||||
|
|
Loading…
Add table
Reference in a new issue