README
author Tero Marttila <terom@paivola.fi>
Mon, 13 Aug 2012 10:36:55 +0300
changeset 37 64c068ab02ac
parent 23 a8998bd43467
permissions -rw-r--r--
debian 6.0.5 + hotplug acpihp
23
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
     1
PKVLM - Debian installer preseed-based bootstrapping.
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
     2
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
     3
Performs unattended bare-metal installs of machines to a working state (i.e. such that Puppet can continue).
3
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
19
b50c8571a067 slight README
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
     5
Generates customized debian-installer ISO images which contain host-specific debconf preseed data, config files and scripts.
3
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
23
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
     7
Uses a customized isolinux.cfg to load the machine-specific preseed.cfg from /cdrom via kernel command line options, 
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
     8
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
     9
Also integrates with LVM/virt-install to create/install new libvirt-based machines on the local KVM host based on the customized media.
3
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
19
b50c8571a067 slight README
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    11
Supports bootstrapping puppet (package + config (server, ssl certs)).
3
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
23
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    13
## Files
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    14
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    15
The debian installer source image (i.e. what you download from debian.org) goes into:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    16
    
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    17
    iso/debian-X.Y.Z-ARCH-netinst.iso
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    18
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    19
    XXX: hardcoded as `$INSTALLER_NAME` in pvklm-create
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    20
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    21
The installer image is unpacked to:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    22
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    23
    images/debian-X.Y.Z-ARCH
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    24
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    25
From where it is copied to:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    26
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    27
    image/debian-X.Y.Z-ARCH_HOSTNAME
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    28
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    29
Then the preseed data is processed/copied/templated/etc from:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    30
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    31
    preseed/... -> image/debian-X.Y.Z-ARCH_HOSTNAME/...
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    32
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    33
    (varies based on chosen options. This also configures scripts to be executed/files to be copied after install)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    34
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    35
And finally, the resulting customized host-specific ISO image is created at:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    36
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    37
    iso/debian-X.Y.Z-ARCH_HOSTNAME.iso
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    38
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    39
## Operation
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    40
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    41
Booting from the .iso loads the syslinux bootloader (isolinux/isolinux.bin, isolinux/boot.cat), which then looks for
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    42
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    43
    isolinux/isolinux.cfg
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    44
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    45
Our isolinux.cfg (generated from preseed/isolinux.cfg) loads the kernel/initrd from /install[.amd], and supplies the
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    46
relevant kernel command-line arguments, which are processed by debian-installer:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    47
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    48
    auto=true priority=critical preseed/file=${PRESEED_MOUNT}/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} --                      ${INSTALL_BOOT_CONSOLE} quiet
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    49
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    50
This loads our preseed.cfg (generated from preseed/preseed.cfg). The preseed.cfg then contains answers to all the d-i interactive
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    51
questions. The preseed.cfg takes care of automating the installer itself.
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    52
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    53
The preseed.cfg contains many templated variables, which are subsituted for variables defined in pvklm-create at ISO-creation time.
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    54
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    55
The preseed.cfg also loads additional preseed files (generated from preseed/*.cfg), e.g.:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    56
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    57
    passwords.cfg       - crypted passwords; not under version control
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    58
    host.cfg            - configure additional software installed on the host (exim)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    59
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    60
The preseed.cfg can also specify additional packages to install:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    61
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    62
    $PRESEED_PACKAGES
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    63
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    64
    (defined within pkvlm-create)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    65
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    66
After the main installation process is complete, the installer can also execute arbitrary script commands from our preseed.cfg
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    67
We use this to copy over configuration files from "$IMAGE/preseed-files" inside the ISO (generated from various files
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    68
in preseed/files and preseed/.../files (e.g. puppet)) to the target system. These are used for more advanced customizations than the debconf
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    69
preseeding lets us do:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    70
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    71
    - configure serial console (/etc/default/grub, update-grub, modify /etc/inittab)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    72
    - configure puppet (/etc/puppet/puppet.cfg, pre-install ssl certs to /etc/puppet/ssl)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    73
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    74
Once the installer is complete, it will reboot, and the newly installed/bootstrapped Debian Linux system will start up for the first time.
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    75
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    76
If puppet was bootstrapped, the puppet agent will start its first run immediately (in the background via /etc/init.d/puppet, as normal).
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    77
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    78
## Usage
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    79
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    80
Some things are hardcoded in preseed/*
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    81
Some things are hardcoded in pklvm-create (the shell script)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    82
Some things can be specified via `foo=...` options on the command line:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    83
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    84
    ./pkvlm-create [options] <name> [name=[value] [...]]
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    85
    ./pkvlm-create asdf domain=test.pvl puppet_master=puppet-testing.paivola.fi
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    86
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    87
These options are defind in pkvlm-create. Not all variables in preseed/... are configureable via options.
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    88
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    89
The only required argument is the machine's name. It is given as the first non-option argument. 
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    90
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    91
## Puppet
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    92
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    93
Supports configuring the host as a puppet agent. Pass a puppet=yes opt:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    94
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    95
    ./pkvlm-create asdf puppet=yes
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    96
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    97
The puppet server can be configured via `puppet_master=...`. It defaults to 'puppet' (i.e. match puppet's default behaviour to resolve a host called
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    98
'puppet').
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    99
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   100
### SSL
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   101
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   102
Supports pre-installing Puppet's SSL certificates from:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   103
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   104
    preseed/puppet/ssl
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   105
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   106
If the puppetmaster's CA cert is present in preseed/puppet/ssl/certs/ca.pem, it is included in the preseed-files. 
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   107
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   108
You can also pre-generate a cert+pkey pair for the machine on the puppetmaster:
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   109
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   110
    puppet cert --generate ...
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   111
    scp $ssldir/{certs,private_keys}/...pem ...
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   112
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   113
These will be copied from "preseed/puppet/ssl/{certs,private_keys}/${FQDN}.pem" to the preseed-files, and the agent
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   114
will use them to connect to the puppetmaster.
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   115