====== Slackware installation using a serial terminal on an embedded system ======
I'll describe here what steps are required to install Slackware to a machine, using a serial terminal.
The boot medium used here is a usb-key, but I think that these steps could be customized for booting
from a CD-ROM (or PXE). I installed to a PC Engines APU ([[http://www.pcengines.ch/apu.htm]]), but most of these steps should be compatible
for other systems. I've noted things special for this machine.
===== Prerequisites =====
* Machine with a serial port you want to install to
* Machine with a serial port you use to install the other machine
* A cable betweeen them ;)
* usbboot.img from slackware(64)?-$version/usb-and-pxe-installers/
===== Preparation of the boot image =====
To install using a serial line, syslinux on the boot image must be configured to use the serial
line for the menu itself and also append the right parameters to the booted kernel. To do this,
mount the usbboot.img somewhere like this:
# mount -o loop usbboot.img /mnt/tmp
Now that the image is mounted, you can change the ''syslinux.cfg'' found in ''/mnt/tmp''. Insert
as a first line:
serial 0 115200
This enables the serial line for syslinux with 115200 bauds (parity and stopbit are hardcoded to n8).
While the bootloader is now using the serial, the kernel still doesn't. Add
console=ttyS0,115200
To the append-line of the first kernel image (huge.s).
I have had problems with the keyboard input in syslinux using the serial line. To speed
the things up you can set another timeout (in s/10) after which the default image (huge.s) is booted.
When you are done with the changes, you can unmount the image as usual. Like [[http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:usbboot#assembling_the_usb_image| recommended by Eric]]
install the syslinux bootloader to the image:
$ syslinux -s usbboot.img
The image is ready now to be dd'd onto a usb-key:
# dd if=usbboot.img of=/dev/myusbkey
===== Installation =====
Connect the serial ports of your two machines with a null-modem cable, and run
minicom -D /dev/ttyS0 -b 115200
on the machine you will use as your terminal. Now boot the machine you are installing
Slackware to from the usb-key. You should see the usual booting on the terminal screen
including the key map selection. After you have logged in as root, partition your disks as
you would normally do.
APU special:
You should also format and set a label to your partitions so that they show up
in ''/dev/disk/by-label'', it makes stuff a __lot__ easier later e.g:
# mke2fs -L root /dev/sdb1
Don't let the Slackware installer format them then of course.
Before you run setup run this command to get a nicer looking output
from dialog:
export DIALOGOPTS="--ascii-lines"
The rest of the installation should work as usual ("special" keys like page up don't seem to work correctly though..). But instead of rebooting after the installation has finished, we need to set the installed system to also use the serial line. Chroot into the installation:
# chroot /mnt
Now edit your ''/etc/lilo.conf'' and insert a line
serial= 0,115200n8
right at the top. The global append line needs the addition like the one
used for the ''usbboot.img'':
console=ttyS0,115200
to let it come up before the init system tries to mount it.
APU special:
If you have installed onto a usb medium (the SD-card reader on the APU is connected by usb)
you should also add:
rootdelay=10
The device order on the APU is likely to change. So you should
''/dev/disk/by-label'' or ''/dev/disk/by-uuid'' paths for your ''root'' partition statements
in ''/etc/lilo.conf''.
Furthermore you'll have to generate an initrd so that the device drivers for the card reader are
avaiable at boot time. Here also use a ''/dev/disk/by-label'' or ''/dev/disk/by-uuid path'' cause of the
changing device order.
If you want to reinstall lilo after the installation, you probably also have to change the
''boot='' device.
Save the lilo configuration and reinstall lilo. But don't reboot now, one more step before we are finished!
Uncomment the line enabling serial login in your inittab and change the speed to 115200:
[...]
# Local serial lines:
s1:12345:respawn:/sbin/agetty -L ttyS0 115200 vt100
[...]
Uncomment ''ttyS0'' in ''/dev/securetty'' or you will not be able to login as root from the serial line!
This should be all. Exit the chroot and reboot your system!
{{tag>howtos serial installation}}