LILO

Related articles
Arch boot process
The
LI
nux
LO
ader, or
LILO
for short, is a legacy multi-boot loader for Linux systems. In spite of being the standard choice over the course of
several years
, it has been slowly phased out. As of January 2016,
LILO is no longer actively developed
.
Supported file systems
From upstream's
readme
:
LILO does not know how to read a file system. Instead, the map installer asks the kernel for the physical location of files (e.g. the kernel image(s)) and records that information. This allows LILO to work with most file systems that are supported by Linux.
In practice, the development of LILO has stopped precisely because of some limitations to that approach, e.g. with Btrfs, GPT, RAID.
Installation
LILO can be
installed
with the
lilo
AUR
package. LILO only works on BIOS systems.
Running the command
lilo
(as root) will install LILO to the MBR. Before running the lilo command you should edit
/etc/lilo.conf
to ensure that the root entry points towards the root partition. If your root partition is on
/dev/sda1
then the root entry should look like this:
root=/dev/sda1
. Remember to change the root line for both the 'arch' and the 'arch-fallback' entries.
Install to partition or partitionless disk
Use the
-b
flag to specify a partition or the whole disk (instead of the implied
-M
) to install LILO to the
volume boot record (VBR)
instead of the
MBR
. See
lilo(8)
and the
answers by Hypnos on the Gentoo forum
.
Configuration
LILO is configured by editing the
/etc/lilo.conf
file and running
lilo
afterwards to apply the new configuration.
As a reminder, consider that LILO
needs
to be run after every kernel upgrade, otherwise the system is likely to be left in an unbootable state.
More help on setting up LILO can be found in the
LILO-mini-HOWTO
.
Sample setup
A typical LILO setup:
Tip
If LILO is really slow while loading the bzImage, try adding
compact
to
/etc/lilo.conf
's global section, as shown below.
/etc/lilo.conf
#
# /etc/lilo.conf
#

boot=/dev/sda
# This line often fixes L40 errors on bootup
# disk=/dev/sda bios=0x80

default=arch
timeout=50
lba32
prompt
# Nice colours
install=menu
menu-scheme=Wb:Yr:Wb:Wb

# Highly recommended to uncomment line below if it
#  does not give any error on booting
compact
# Remember to change root=/dev/???
image=/boot/vmlinuz-linux
	label=arch
	root=/dev/disk/by-uuid/
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
initrd=/boot/initramfs-linux.img
	read-write

image=/boot/vmlinuz-linux
	label=arch-fallback
	root=/dev/disk/by-uuid/
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
initrd=/boot/initramfs-linux-fallback.img
	read-write

#other=/dev/hda1
#	label=dos
You can use
hwinfo --framebuffer
to determine what vga modes you can use.
Using an image as background
First prepare the background image:
Open it in GIMP.
Scale it to 640x480.
Change it to indexed mode (
Image > Mode > Indexed
).
Select
Create optimal palette
and set it to 16 colours. Choose whatever dithering method suits you.
Open the "Indexed Palette" dialog. Make note of which colours you want to use for menu text entries, the clock, etc. In your
lilo.conf
, you refer to the colours by index.
Export the image as a bmp in your
/boot
directory. In Export dialog check option
Do not write color space information
Now edit
lilo.conf
. There are a few options that can be set for your graphical menu. See
man lilo.conf
for more information.
bitmap=<bitmap-file> Set this to the file that you saved above.
bmp-colors=<fg>,<bg>,<sh>,<hfg>,<hbg>,<hsh>
These are the colours of the entries in the menu. They refer to the foreground, background, and shadow colours respectively, followed by the same for highlighted text. Do not use spaces. The values used are indices into the colour palette that you discovered in the previous step. If you choose, you can leave a value blank (but do not forget the comma). The default background is transparent, the default shadow is to have none.
bmp-table=<x>,<y>,<ncol>,<nrow>,<xsep>,<spill> This option specifies where the menu is placed. x and y are the character coordinates. You can also suffix them with a p to specify pixel coordinates.
bmp-timer=<x>,<y>,<fg>,<bg>,<sh> This option specifies the coordinates and colour of the timer that counts down the timeout before booting a default entry. It uses colour indices for the colours, and character (or pixel) coordinates.
For example:
bitmap=/boot/arch-lilo.bmp
bmp-colors=1,0,8,3,8,1
bmp-table=250p,150p,1,18
bmp-timer=250p,350p,3,8,1
Save
lilo.conf
, run
lilo
as root, and reboot and see how it looks!
Pacman hook
lilo needs to be run after every kernel update. You can use a pacman hook to automate it. See
Pacman#Hooks
or
alpm-hooks(5)
.
Make the directory
/etc/pacman.d/hooks
if it does not already exist.
/etc/pacman.d/hooks/lilo.hook
[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Package
Target = linux
Target = linux-lts

[Action]
Description= Run lilo after kernel update
When = PostTransaction
Depends = lilo
Exec = /usr/bin/lilo
Troubleshooting
Read write error message whilst booting
This error message is caused by a
change
in mkinitcpio which was in response to this
systemd
commit
. The change causes partitions to be fsck'ed twice when mounted read only. To fix this error edit
/etc/lilo.conf
and change the 'read only' line to 'read write' for both arch entries.
See
this forum thread
for more information.
Devmapper not found error message after kernel upgrade
It is possible that running the
lilo
command after a kernel upgrade results in a devmapper not found error. If this is the case run
modprobe dm-mod
before running
lilo
after a kernel upgrade.
See also
List of kernel parameters that can be used at boot time
List of kernel paramaters with further explanation and grouped by like options ('Kernel Boot Command-Line Parameter Reference',
Linux Kernel In A Nutshell
)