Adding BRLTTY to a Red Hat Linux Install Floppy
===============================================

Written on April 7, 2002

Here is an outline of a procedure for adapting the RedHat (or similar)
installation boot disk so that BRLTTY can be used during the installation
process.

History:
-Initial draft from Stéphane Doyon <s.doyon@videotron.ca>
-Additions from Nicolas Pitre <nico@fluxnic.net>
-April 7, 2002: Mostly rewritten by Stéphane Doyon to take into account
   the INIT_PATH hack
-September 26, 2002: Amended by Dave Mielke <dave@mielke.cc> due to change from
   make file editing to autoconf in 3.1.

TODO:
-Figure out how to use shared libraries from a statically linked
   executable, when the lib references symbols from the main
   program. With that we could do generic bootdisk with dynamic selection
   of braille driver.
-Give working instructions on how to make higher sized floppies for a
   one-floppy solution.

You need an already working Linux station to perform this. A certain
level of Linux/Unix expertise is also required. Please read to the end
before doing anything. You'll probably end up asking for sighted help at
some point (such as to know why it won't boot, or to help install BRLTTY
on the new machine), but if you can get this to work then you'll be free
to spend an hour on your own choosing which packages you want installed.

This was last tried with RedHat 7.2.

First step is compiling BRLTTY. The bootdisk will use one and only one
BRLTTY driver, so you must choose wich. Do:

make distclean
./configure --enable-standalone-programs --with-init-path
            --with-braille-driver=<driver> --with-text-table=<table> 
make
where <driver> is the driver to build into BRLTTY (one of the possible values
listed under --with-braille-driver in the output from ./configure --help) and
<table> is the text translation table to use (such as text.french.tbl,
text.german.tbl, ...) (see the the BrailleTables/ subdirectory).

This will build BRLTTY with the chosen display driver built-in, and will
link the BRLTTY executable statically so that it doesn't depend on any
shared libraries.

If your display is on the second serial port instead of the first,
you will need to add "--with-braille-device=/dev/ttyS1".

You should get an executable called "brltty" (in the "Programs/"  subdirectory)
whose size is around 570K, depending on the driver you chose. If you do:

	file Programs/brltty

it should say, among other things, "statically linked".

The Red Hat installation boot disk is a DOS disk that contains a boot
loader (called syslinux), a kernel (called vmlinuz), and an initial ramdisk
(called initrd.img). This initial ramdisk is the initial root filesystem
containing a bootstrap installation program: /sbin/init. We'll just put
brltty on that ramdisk image and make sure it is started before anything
else. However, because the statically linked brltty executable is so
large, we will have to put the ramdisk image on a second floppy, because
it won't fit on the original single boot floppy (with the kernel).

So now we must hack floppies. Make a temporary work directory. We will
call it ".../work", could be "~/work".

mkdir .../work
mkdir .../work/etcbrltty

Now copy relevant files from your BRLTTY build. Copy the executable, the
translation table, the contraction table (if you want it), and the help file(s)
to your work directory.

cp Programs/brltty .../work
cp BrailleTables/*.tbl .../work/etcbrltty
cp ContractionTables/*.ctb .../work/etcbrltty
cp help/* .../work/etcbrltty

(You can also copy alternative translation tables from BrailleTables/
to .../work/etcbrltty. These CAN be loaded dynamically.)

Now change to the work directory:

cd .../work

The executable is way too large for a boot disk because it contains lots of
unneeded symbol table and debugging information.  Remove this excess data in
order to make the executable as small as possible.

strip brltty

Next step is to select an installation boot floppy image from your
distribution. This could be images/boot.img or images/bootnet.img from an
RH CDROM. Consider checking the updates site for your distribution in
case they have updated installation disk images. If what you have is an
actual floppy, use "dd if=/dev/fd0 of=boot.img bs=512" to make an image
file from it.

Copy the chosen image to your work directory and if necessary rename it
to boot.img.

So now the current directory should contain boot.img, brltty, and
etcbrltty/.

Now run the rhmkbot script (which is located in the same directory as this
README). It will copy boot.img to myboot.img, and it will modify the
syslinux.cfg: it will add a new boot entry called "brltty". That entry will
have options to cause syslinux to load a ramdisk from a second floppy, instead
of using the initrd.img on the first floppy. The brltty entry has the "text"
keyword parameter to trigger the text-mode install. rhmkbot also makes this new
entry the default boot entry.

Now run the rhmkroot script. It will get initrd.img (the initial ramdisk)
from boot.img and call it myroot.img. It will modify that image:
-Rename /sbin/init to /sbin/init_real,
-Copy brltty to /sbin/brltty,
-Link /sbin/init to /sbin/brltty
-Copy files from etcbrltty to /etc/brltty,
-Try to make sure necessary devices such as vcsa, serial ports, and
   console device exist in /dev. (vcsa is usually missing.)

If it turns out that the brltty executable is too large, do "./configure
--help" and check out the various "--disable-..." options. Each removes a
specific feature from BRLTTY, and results in a corresponding decrease in the
size of the executable. Recommended possibilities include:

   --disable-table-selection --disable-learn-mode --disable-contracted-braille
   --disable-pcm-support --disable-midi-support --disable-fm-support
   --disable-api --disable-gpm
   --disable-speech-support --without-x

If building the Papenmeier driver, then also consider:

   --disable-pm-configfile

Remember to do "make distclean" if you need to reconfigure BRLTTY.

Assuming there are no errors, the next step is to actually write the
floppies.

So get two formatted floppies. One will be the boot floppy, the other the
ramdisk floppy. To write the boot floppy do:

dd if=myboot.img of=/dev/fd0 bs=512

To write the ramdisk floppy do:

dd if=myroot.img of=/dev/fd0 bs=512

That's it!

So now boot the boot floppy on the machine you want to install. At the
prompt you can press ENTER to choose the brltty entry. 

If you want to specify boot parameters, remember to use the label
"brltty" instead of "linux".

You can pass options to BRLTTY from the boot prompt by using option names
similar to those in the brltty.conf file: use only uppercase, use underscores
instead of minus signs, and prefix with BRLTTY_. For example:

brltty BRLTTY_BRAILLE_DEVICE=/dev/ttyS1

When you press ENTER, syslinux will load the kernel. When the floppy
stops spinning the kernel will start to run and will prompt you for the
ramdisk floppy. Put the second floppy in and press ENTER. The kernel will
load the ramdisk. When the floppy stops spinning, BRLTTY SHOULD
(hopefullY) come on and the installation program should start.

One of the problems you may have during the installation process is that
some autoconfiguration programs may play around with the serial ports to
try to autodetect hardware, thereby upsetting them and causing BRLTTY to
stop working. This can also occur when the system itself boots. More
recent RedHat versions are less aggressive though. Two tricks if you have
problems:
-If kudzu runs when your system boots and upsets BRLTTY, either disable
that service (using chkconfig or ntsysv) or modify /etc/sysconfig/kudzu
or the script that uses kudzu to make it use the --safe option.
-To get the installation program to leave a serial port alone, you might
try to modify the ramdisk to change /dev/ttyS0 to say /dev/ttySmyown, and
tell BRLTTY to use that as it's serial port. This might have the effect
of hiding the serial port from bad applications.

Note that you must also install BRLTTY on your new machine. When it will boot
Linux after the installation, BRLTTY will not be installed and the machine will
be inaccessible. One way to simplify things is to use the statically linked
brltty you compiled for the installation disk, as it is fairly self-contained.
Once it's running, then you can build yourself a shared version and modify your
boot scripts or inittab to have BRLTTY start automatically. A nice way to get
brltty onto your new machine is this: during the installation process, after
your target partition has been formatted, it is (at least with the current RH
installation program) mounted under /mnt/sysimage. You can temporarily put
aside the installation program and get a shell by going to the second virtual
console (alt-F2). There you can do:

cp /sbin/brltty /mnt/sysimage/bin/

I am not sure if at that point it is possible to edit inittab or startup
scripts. Otherwise on your first boot, you just have to log in as root
(without braille support) and type "/bin/brltty" and if all went well
BRLTTY should come on.

Good luck!
