Some tips for working on the installer.
Making changes before the casper-bottom scripts are processed
Unfortunately, aside from cat and redirection, your only editor in the initramfs is busybox sed (less featureful than the copy of sed present on your system).
Test changes to files in scripts/casper-bottom using sed s-commands (s/string/replacement/g), then apply them with sed -i.
Making changes just before the filesystem is mounted
Add break=bottom to the kernel command line. Once at the (initramfs) prompt, type the following:
chroot /root bash mount -t proc proc /proc mount -t devpts devpts /dev/pts screen dhclient eth0
Using screen allows you to use scp and ssh interactively. Remember, 10.0.2.2 is the host in KVM.
Fixing your keymap after running ubiquity
Ubiquity applies the selected keymap immediately. If you've selected a keymap not applicable to your keyboard and have already exited ubiquity, type the following to reset your keymap (where 'us' is your layout):
Copying debconf template changes to the live environment
sudo apt-get -y install po-debconf debconf-utils mkdir po po2debconf ubiquity.templates > ubiquity.templates-stripped sudo debconf-loadtemplate ubiquity ubiquity.templates-stripped
Pretending you're on an Intel Mac
The partitioner changes behaviour on Intel Macs to accommodate Apple's deviation from the GPT specification. It's sometimes useful to simulate this. Run these commands as root.
(echo '#! /bin/sh'; echo 'i386/mac') >/bin/archdetect # In d-i, run through installer until after "Loading additional components". # In ubiquity, you can proceed immediately. sed -i 's/^\([[:space:]]*\)\(parted_server\)/\1PARTED_GPT_APPLE=1 \2/' /lib/partman/init.d/30parted
Appending to your block of changes in the changelog
dch has the rather odd default of creating a new block for your entries if someone has added an entry since your last change. To disable this, add the following to your ~/.devscripts file:
Working with packages that don't exist outside of Ubuntu
When using dch to modify the changelog, use the -U option rather than -i or -a as it will intelligently increment the minor number.
Editing KVM disk images
Pressing Shift to get at the GRUB menu doesn't work inside KVM for some reason. This makes some installer development work tricky, especially working on oem-config. To edit a KVM disk image without having to boot it, install the nbd-client package if you don't have it already, and run this in one window:
... and this in another:
sudo nbd-client localhost 1024 /dev/nbd0 sudo mount /dev/nbd0p1 /mnt # hack on /mnt sudo umount /mnt sudo nbd-client -d /dev/nbd0
Working on oem-config in reasonable time using KVM snapshots
Working on oem-config takes a while, because you need to do an OEM-mode installation, reboot, run oem-config-prepare, reboot again, and then you get to run oem-config. If you make a mistake, you have to go back to the start, and this sucks, so don't do it. Instead, you can use KVM snapshots. Any time you want to save your state, run:
kvm-img snapshot -c NAME-OF-SNAPSHOT foo.img
And to go back to a previous snapshot:
kvm-img snapshot -a NAME-OF-SNAPSHOT foo.img
I've only ever tried doing this when the VM isn't running, since as far as I know it's snapshotting the disk rather than the full machine state.
Using locally-built udebs in debian-installer
Switch to VT2 and edit /var/lib/dpkg/info/load-cdrom.postinst. Add lines to wget your udeb and udpkg -i it. Switch back to VT1 and continue the install. It may fail at the "loading additional components" phase. Go into the menu and configure the network, then go back into "load additional components from the CD" step.
Modifying the contents of /media/cdrom with read-only media
This helps when debugging problems with apt-cdrom, among other things:
sudo unlink /media/cdrom sudo mkdir /media/cdrom sudo mount -t overlayfs -o lowerdir=/cdrom,upperdir=$(mktemp -d) overlayfs /media/cdrom