From 11ba4640b4c7d2e0018fcaafa0fab66f147a169f Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sat, 11 Jan 2014 22:34:44 +0100 Subject: [PATCH] disable unsupported iso - create /init - include support for another initial manifest Signed-off-by: Nico Schottelius --- cdist/preos.py | 89 +++++++++++++++++++++++----------- docs/dev/logs/2014-01-09.preos | 29 +++++++++-- scripts/cdist | 6 +-- 3 files changed, 87 insertions(+), 37 deletions(-) diff --git a/cdist/preos.py b/cdist/preos.py index 6d473ddf..cbb9f23c 100644 --- a/cdist/preos.py +++ b/cdist/preos.py @@ -24,16 +24,42 @@ import glob import os import subprocess import stat +import sys import shutil import tempfile - import cdist.config import cdist.exec.local import cdist.exec.remote log = logging.getLogger(__name__) +DEFAULT_MANIFEST = """ +for pkg in \ + file \ + linux-image-amd64 \ + openssh-server \ + syslinux \ + gdisk util-linux \ + btrfs-tools e2fsprogs jfsutils reiser4progs xfsprogs; do + __package $pkg --state present +done + +# initramfs requires /init +__link /init --source /sbin/init --type symbolic + +__file /etc/network/interfaces --source - --mode 0644 << eof +# The loopback network interface +auto lo +iface lo inet loopback + +# The primary network interface +auto eth0 +allow-hotplug eth0 +iface eth0 init dhcp +eof +""" + class PreOSExistsError(cdist.Error): def __init__(self, path): self.path = path @@ -65,32 +91,9 @@ KERNEL kernel INITRD initramfs """ - self._init_helper() - def _init_helper(self): self.helper = {} - self.helper["manifest"] = """ -for pkg in \ - file \ - linux-image-amd64 - openssh-server - syslinux \ - gdisk util-linux \ - btrfs-tools e2fsprogs jfsutils reiser4progs xfsprogs; do - __package $pkg --state present -done - -__file /etc/network/interfaces --source - --mode 0644 << eof -# The loopback network interface -auto lo -iface lo inet loopback - -# The primary network interface -auto eth0 -allow-hotplug eth0 -iface eth0 init dhcp -eof -""" + self.helper["manifest"] = self.initial_manifest self.helper["remote_exec"] = """#!/bin/sh # echo $@ # set -x @@ -200,7 +203,25 @@ cp -L "$src" "$real_dst" self.create_pxeconfig() self.create_pxelinux() + + def setup_initial_manifest(self, user_initial_manifest, replace_manifest): + if user_initial_manifest: + if user_initial_manifest == '-': + user_initial_manifest_content = sys.stdin.read() + else: + with open(user_initial_manifest, "r") as fd: + user_initial_manifest_content = fd.read() + else: + user_initial_manifest_content = "" + + if replace_manifest: + self.initial_manifest = user_initial_manifest_content + else: + self.initial_manifest = "{default}\n# User supplied manifest\n{user}".format(default=DEFAULT_MANIFEST, user=user_initial_manifest_content) + def config(self): + self._init_helper() + handle, path = tempfile.mkstemp(prefix='cdist.stdin.') with tempfile.TemporaryDirectory() as tempdir: host = self.target_dir @@ -226,11 +247,21 @@ cp -L "$src" "$real_dst" self = cls(target_dir=args.target_dir[0], arch=args.arch) + # read initial manifest first - it may come from stdin + if args.config: + self.setup_initial_manifest(args.initial_manifest, args.replace_manifest) + + # Bootstrap: creates base directory if args.bootstrap: self.bootstrap() + + # Configure the OS if args.config: self.config() - if args.pxe_boot: - self.create_pxe(args.pxe_boot) - if args.iso_boot: - self.create_iso(args.iso_boot) + + # Output pxe files + if args.pxe_boot_dir: + self.create_pxe(args.pxe_boot_dir) + + #if args.iso_boot_dir: + # self.create_iso(args.iso_boot) diff --git a/docs/dev/logs/2014-01-09.preos b/docs/dev/logs/2014-01-09.preos index c0b840ee..0f0b0384 100644 --- a/docs/dev/logs/2014-01-09.preos +++ b/docs/dev/logs/2014-01-09.preos @@ -8,21 +8,25 @@ - add option for different initial manifest - allow -, stdin usage + - allow to replace current manifest (later) - - add option for additional manifest - - allow -, stdin usage - - - trigger + x trigger - can be handled in the manifest of the user - remove /var/cache/apt/archives/* ? + - later, optimisation level + + + - bug: cdist config als root! - fix linux-image name (amd64) + - ln -s /sbin/init /init + - blog! - self configuring - - pxe + x pxe /pxe/ - pxelinux.0 - linux @@ -31,6 +35,9 @@ - default - iso + - later + - usb stick (+efi version) + - later - add unit tests @@ -81,3 +88,15 @@ INFO: /home/users/nico/preos-tests/preos03: Generating code for __package/linux- INFO: /home/users/nico/preos-tests/preos03: Finished successful run in 2.546635866165161 seconds [1:16] bento:~% +-------------------------------------------------------------------------------- +[21:14] bento:vm-tests% qemu-system-x86_64 -m 2G -boot order=cn -drive file=testhd1,if=virtio -net nic -net user,tftp=$(pwd -P)/tftp,bootfile=/pxelinux.0 + +-------------------------------------------------------------------------------- +[21:16] bento:preos-tests% sudo cdist preos -vp /home/users/nico/vm-tests/tftp /home/users/nico/preos-tests/preos03/ +INFO: cdist: version 3.0.0-42-g0d78ab3 +INFO: cdist.preos: Creating kernel ... +INFO: cdist.preos: Creating initramfs ... +760780 blocks +INFO: cdist.preos: Creating pxe configuration ... +INFO: cdist.preos: Creating pxelinux.0 ... + diff --git a/scripts/cdist b/scripts/cdist index c1e1cd94..ed9d2eda 100755 --- a/scripts/cdist +++ b/scripts/cdist @@ -101,9 +101,9 @@ def commandline(): parser['preos'].add_argument('-r', '--replace-manifest', help='Instead of appending to the built in manifest, replace the internal manifest', action="store_true") - parser['preos'].add_argument('-I', '--iso-boot', - help='Create ISO for booting in given location') - parser['preos'].add_argument('-p', '--pxe-boot', +# parser['preos'].add_argument('-I', '--iso-boot-dir', +# help='Create ISO for booting in given location') + parser['preos'].add_argument('-p', '--pxe-boot-dir', help='Create PXE files for booting in given location') parser['preos'].add_argument('target_dir', nargs=1, help='Select target directory')