Puppet, VirtualBox and Interfaces

At work we’re using a small Python script to

  • do some sanity checking (hostname checks, acquiring IP address etc)
  • clone a VirtualBox machine (needs to be stopped because of Bug 9255)
  • modify machine to according # of CPUs and amount of RAM
  • mount the disk locally,
  • mount the disk’s first partition locally,
  • put SSH keys in place, used during initial provisioning,
  • update network setting files, including udev rules (/etc/udev/rules.d/70-persistent-net.rules) to get predictable network card names and being able to map them to IP addresses
  • unmount all above,
  • generate new DNS and basic Puppet manifest files, reload services (puppet),
  • boot it,
  • run puppet agent on the new machine to generate and push client signing request to puppetmaster
  • sign cert on puppetmaster,
  • run puppet to have the machine finish it’s provisioning (overwrites the SSH keys)

Done. :-)

To issue commands over SSH we’re using Fabric (and might, or might not, move to using Serf).

Infrarött

Skärm vid skärm
Skärm vid skärm

Har en liten skön installation här hemma där en dator driver en skärm som står bredvid TV:n. Och detta är problemen:

  • Ubuntu skickar med modulerna som behövs för lirc (Linux Infrared Remote Control)
  • Debian skickar inte med modulerna, utan dess behöver byggas själv. Paketet heter lirc-modules-source

För instruktioner om hur man bygger det binära modulpaketet för Debian, läs: /usr/share/doc/lirc-modules-source/README.Debian

Man skall köra

dpkg-reconfigure lirc-modules-source # för att markera vad som behöver byggas (lirc_imon)
m-a prepare  # för att förbereda modulbygget (module-assistant)
m-a a-i lirc #

Sedan behöver man bara set till att modulerna laddas (modprobe manuellt):

echo "lirc_imon" >> /etc/modules

Lite mer än man önskar. Efter omstart visas

stereo:~# lsmod | grep lirc
lirc_imon              11348  0
lirc_dev               10196  1 lirc_imon
usbcore               125484  4 lirc_imon,uhci_hcd,ehci_hcd

och sedan fick jag justera /etc/init.d/lirc manuellt – argumenten till lircd (-d /dev/lirc0) sattes inte upp ordentligt. Och jag valde att starta irexec från /home/browser/.xsession istället för en systemspecifik.

unclutter plockar bort markören från X efter en sekund eller två.

Efter att ha mailat Enrico Zini fick jag tips om nodm som gör just det som önskades åstadkomma ovan – dvs en Display Manager som “bara” kan logga in en specifik användare och starta en Xsession. Utmärkt för en “kiosk”-lösning alltså.

För att få Firefox (Iceweasel under Debian) att öppna alla anrop från irexec i en och samma flik och fönster så behöver browser.link.open_newwindow sättas till 1 (via about:config).

debootstrap

Det mest har jag plockat rakt av från http://paste.lisp.org/display/59031.

Idag har jag dock kollat in http://d-i.alioth.debian.org/manual/en.i386/apds03.html då jag försöker få till en lättare installation som bara drar igång en browser när X startar.

Observera att det är skillnader mellan Debian och Ubuntu, t ex console-data vs console-setup. Ubuntu-info: http://www.cs278.org/blog/ubuntu-configuration/feisty-debootstrap-encrypted-install/

debootstrap hardy /mnt/ http://se.archive.ubuntu.com/ubuntu/
cp /etc/hosts /mnt/etc/
cp /etc/network/interfaces /mnt/etc/network/
cp /etc/bash.bashrc /mnt/etc/

mount --bind /dev /mnt/dev
mount -t proc proc /mnt/proc
mount -t sysfs sysfs /mnt/sys
LANG=C chroot /mnt

aptitude update
aptitude install locales console-data
dpkg-reconfigure locales console-data
# localedef -f UTF-8 -i sv_SE sv_SE.UTF-8
# cp /usr/share/zoneinfo/Europe/Stockholm /etc/localtime

# sed -i 's/main/& universe multiverse restricted/' /etc/apt/sources.list
apt-get update
apt-get dist-upgrade

passwd
adduser ceda
addgroup admin
adduser ceda admin
echo "%admin ALL=(ALL) ALL" >> /etc/sudoers 

FSTAB!

apt-get install linux-image-server grub
mkdir /boot/grub
update-grub -y
update-initramfs -u
exit

echo "(hd0) /dev/sdb" > /boot/grub/device.map # alltså ej i target
grub-install --root-directory=/mnt --no-floppy /dev/sdb

umount /mnt/dev/
umount /mnt/proc/
umount /mnt/sys
umount /mnt/